1.先用jdbc操作数据库,心里想让数据库干什么,用jdbc解决,在我们面前的只有一条路,就是jdbc
以前我们输入用户名密码进入数据库,进行查询,现在这个操作是这样完成的
import java.sql.*; public class Connect { Connection conn; Statement stmt; ResultSet rs; public Connect(String DB,String user,String password,String sql) throws SQLException { //加载驱动程序类 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //获取连接类 conn=DriverManager.getConnection(DB,user,password); //获取执行sql的对象 stmt=conn.createStatement(); //获取执行sql后的返回集 rs=stmt.executeQuery(sql); //处理结果 while(rs.next()) { System.out.print(rs.getObject(1)); }
//关闭连接(就像你打开数据库获得你想要的东西后就得关了它,以免占用资源) } }
public class Test1 { public static void main(String [] agrs) throws SQLException { Connect c=new Connect("jdbc:mysql://localhost:3306/mydata","root","root","select * from emp"); } }
还可以show databases
public class Test1 { public static void main(String [] agrs) throws SQLException { Connect c=new Connect("jdbc:mysql://localhost:3306/mydata","root","root","show databases"); c.conn.close(); } }
等等jdbc都可以做到
2.加载驱动程序可以用反射的机制
Class.forName("com.mysql.jdbc.Driver");
3.获取数据库的连接,可以用配置文件方式,也可以用url方式(注意配置文件需要放到根目录下)
info=new Properties(); info.setProperty("user", user); info.setProperty("password", password); conn=DriverManager.getConnection(DB, info);
conn=DriverManager.getConnection(DB+'?'+"user="+user+'&'+"password="+password);
4.statement
5.结果集的处理
还有get##(基本数据类型等)将数据库的类型与java的类型对应起来
6.DBUtils
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle; public class DBUtils { private static String url; private static String user; private static String password; private static String sql; private static String driverclass; static { //注意配置文件需要放到根目录下,不然报错 ResourceBundle rb =ResourceBundle.getBundle("jdbc"); driverclass=rb.getString("driverclass"); url=rb.getString("url"); user=rb.getString("user"); password=rb.getString("password"); sql=rb.getString("sql"); try { Class.forName(driverclass); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password); } public static Statement getStatement(Connection connect) throws SQLException { return connect.createStatement(); } //有结果集 public static ResultSet getSqlQuery(Statement stmt) throws SQLException { return stmt.executeQuery(sql); } //没有结果集 public static void getSqlUpadate(Statement stmt) throws SQLException { stmt.executeUpdate(sql); } //处理结果集 public static void getResult(ResultSet rs) throws SQLException { //结果集怎么才能输出所有列 while(rs.next()) System.out.println(rs.getObject(1)); } //关闭资源 public static void closeAll(ResultSet rs,Statement stmt,Connection conn) { if(rs!=null) { try{rs.close(); }catch(Exception ee) { } rs=null; } if(stmt!=null) { try{stmt.close(); }catch(Exception ee) { } stmt=null; } if(conn!=null) { try{conn.close(); }catch(Exception ee) { } conn=null; } } }
driverclass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydata
user=root
password=root
sql=select * from emp where empno = 9997
import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Test { public static void main(String[] agrs) { Connection conn=null; Statement stmt=null; ResultSet rs=null; try { conn=DBUtils.getConnection(); stmt=DBUtils.getStatement(conn); rs=DBUtils.getSqlQuery(stmt); DBUtils.getResult(rs); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("ha"); }finally { DBUtils.closeAll(rs, stmt, conn); } } }
7.多个功能一起写
当多个功能一起写时,你会发现程序的好坏由这几个部分构成(界面,在控制台提示你输入什么,或者在控制台显示操作之后的结果数据;逻辑控制,当你输入什么时操作哪个部分,当你输入成功时又该操作哪部分,是怎么跟用户交互将这种逻辑体现出来;获取控制台输入的对象;与数据库的连接,结果集的处理)
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; public class Test { public static void main(String[] agrs) { //这种控制总体架构的叫做什么,来规划各个模块的位置.这种控制也需要调代码优化的 Connection coon; PreparedStatement stmt; ResultSet rs; while(true) { System.out.println("请输入登录,注册,查询商品的d,z,c其中一个:"); Scanner sc =new Scanner(System.in); char s=sc.nextLine().charAt(0); switch(s) { case 'd': //输入界面和获取数据这部分也有调优 int i=1; while(i==1) { User u=new User(); User u2=new User(); System.out.println("请输入用户名:"); String c1=sc.nextLine(); System.out.println("请输入密码:"); String c2=sc.nextLine(); u.setName(c1); u.setPassword(c2); //连接数据库部分(分为连接部分,sql部分,逻辑控制部分,显示部分) try { coon=DBUtils.getConnection(); String sql="select * from User where name=? and password=?"; stmt=coon.prepareStatement(sql); stmt.setString(1, u.getName()); stmt.setString(2, u.getPassword()); rs=stmt.executeQuery(); //处理结果集 while(rs.next()) { u2.setName(rs.getString(1)); u2.setPassword(rs.getString(2)); } //判断是否相等(这也是一部分值得完善的代码) if(u2.getName()!=null&&u2.getPassword()!=null) { System.out.println("登录成功"); i=0; }else { System.out.println("登录失败"); System.out.println("请输入重新登录还是退出:0退出,1重新登录"); String c3=sc.nextLine(); i=Integer.parseInt(c3); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; case 'z': //这里跟上面一样,都是在控制台输入数据,返回一个对象,做一个获取user对象的类 int i2=1; while(i2==1) { User u=new User(); GetUser getuser=new GetUser(); u=getuser.getUser(); //与数据库的连接部分 try { coon=DBUtils.getConnection(); String sql="insert into User values (?,?)"; stmt=coon.prepareStatement(sql); stmt.setString(1, u.getName()); stmt.setString(2, u.getPassword()); //检查模块 if(!stmt.execute()) {//这里值的完善,因为可能出现重名等判断,还有密码等 //成功与否的方法 System.out.println("注册成功,欢迎"+u.getName()); i2=0; }else {//这里没有注册成功的代码跟上一个差不多 System.out.println("注册失败"); System.out.println("请输入重新注册还是退出:0退出,1重新登录"); String c3=sc.nextLine(); i2=Integer.parseInt(c3); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } break; case 'c': User u2=new User(); User u=new User(); try { coon=DBUtils.getConnection(); //查询这部分就更复杂了,因为有多种查询情况 System.out.println("请选择你要查询的样子:0根据一个user名来查询,1根据多个user名来查询"); Scanner sc2 =new Scanner(System.in); int m=Integer.parseInt(sc2.nextLine()); if(m==0) { System.out.println("请输入你要查询的名字"); String ss=sc2.nextLine(); String sql="select * from User where name=? "; stmt=coon.prepareStatement(sql); stmt.setString(1, ss); rs=stmt.executeQuery(); while(rs.next()) { u2.setName(rs.getString(1)); u2.setPassword(rs.getString(2)); } if(u2.getName()!=null) { System.out.println(u2.getName()); System.out.println(u2.getPassword()); }else { System.out.println("没有"); } }else { System.out.println("请输入你要查询的第一个名字"); String ss=sc2.nextLine(); System.out.println("请输入你要查询的第二个名字"); String ss2=sc2.nextLine(); String sql="select * from User where use=? and ? "; stmt=coon.prepareStatement(sql); stmt.setString(1, ss); stmt.setString(2, ss2); rs=stmt.executeQuery(); //这里就需要定义一个list来存储多个对象(先不写) while(rs.next()) { System.out.println(rs.getString(1)); System.out.println(rs.getString(2)); } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } break; default: System.out.println("输入不合法"); } } } }
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle; public class DBUtils { private static String url; private static String password; private static String driverclass; private static String user; static { ResourceBundle rb =ResourceBundle.getBundle("jdbc"); driverclass=rb.getString("driverclass"); url=rb.getString("url"); user=rb.getString("user"); password=rb.getString("password"); try { Class.forName(driverclass); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password); } public static void closeAll(ResultSet rs,Statement stmt,Connection conn) { if(rs!=null) { try{rs.close(); }catch(Exception ee) { } rs=null; } if(stmt!=null) { try{stmt.close(); }catch(Exception ee) { } stmt=null; } if(conn!=null) { try{conn.close(); }catch(Exception ee) { } conn=null; } } }
public class GetUser { User u; public User getUser() { Scanner sc =new Scanner(System.in); System.out.println("请输入用户名:"); String c1=sc.nextLine(); System.out.println("请输入密码:"); String c2=sc.nextLine(); u=new User(); u.setName(c1); u.setPassword(c2); return u; } }
public class User { public String name; public String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
8.进一步封装
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ResourceBundle; public class DBUtils { private static String url; private static String password; private static String driverclass; private static String user; static { ResourceBundle rb =ResourceBundle.getBundle("jdbc"); driverclass=rb.getString("driverclass"); url=rb.getString("url"); user=rb.getString("user"); password=rb.getString("password"); try { Class.forName(driverclass); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,user,password); } public static void closeAll(ResultSet rs,Statement stmt,Connection conn) { if(rs!=null) { try{rs.close(); }catch(Exception ee) { } rs=null; } if(stmt!=null) { try{stmt.close(); }catch(Exception ee) { } stmt=null; } if(conn!=null) { try{conn.close(); }catch(Exception ee) { } conn=null; } } }
import java.util.Scanner; public class GetUser { User u; public User getUser() { Scanner sc =new Scanner(System.in); System.out.println("请输入用户名:"); String c1=sc.nextLine(); System.out.println("请输入密码:"); String c2=sc.nextLine(); u=new User(); u.setName(c1); u.setPassword(c2); return u; } }
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class CRUD { Connection coon; PreparedStatement stmt; ResultSet rs; User u2; public User select (User u) { try { coon=DBUtils.getConnection(); String sql="select * from User where name=? and password=?"; stmt=coon.prepareStatement(sql); stmt.setString(1, u.getName()); stmt.setString(2, u.getPassword()); rs=stmt.executeQuery(); //处理结果集 while(rs.next()) { u2=new User(); u2.setName(rs.getString(1)); u2.setPassword(rs.getString(2)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { DBUtils.closeAll(rs, stmt, coon); } return u2; } public boolean create(User u) { try { coon=DBUtils.getConnection(); String sql="insert into User values (?,?)"; stmt=coon.prepareStatement(sql); stmt.setString(1, u.getName()); stmt.setString(2, u.getPassword());//增 boolean i=stmt.execute(); return i; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; }finally { DBUtils.closeAll(rs, stmt, coon); } } public User select2(String ss) { try { coon=DBUtils.getConnection(); String sql="select * from User where name=? "; stmt=coon.prepareStatement(sql); stmt.setString(1, ss); rs=stmt.executeQuery(); //处理结果集 while(rs.next()) { u2=new User(); u2.setName(rs.getString(1)); u2.setPassword(rs.getString(2)); } return u2; } catch (SQLException e) { // TODO Auto-generated catch block return null; }finally { DBUtils.closeAll(rs, stmt, coon); } } public void select2(String ss,String ss2) { try { coon=DBUtils.getConnection(); String sql="select * from User where use=? and ? "; stmt=coon.prepareStatement(sql); stmt.setString(1, ss); stmt.setString(2, ss2); rs=stmt.executeQuery(); while(rs.next()) { System.out.println(rs.getString(1)); System.out.println(rs.getString(2)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { DBUtils.closeAll(rs, stmt, coon); } } }
public class User { public String name; public String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner; public class Test { public static void main(String[] agrs) { //这种控制总体架构的叫做什么,来规划各个模块的位置.这种控制也需要调代码优化的 Connection coon; PreparedStatement stmt; ResultSet rs; while(true) { System.out.println("请输入登录,注册,查询商品的d,z,c其中一个:"); Scanner sc =new Scanner(System.in); char s=sc.nextLine().charAt(0); switch(s) { case 'd': //输入界面和获取数据这部分也有调优 int i=1; while(i==1) { User u=new User(); User u2=new User(); System.out.println("请输入用户名:"); String c1=sc.nextLine(); System.out.println("请输入密码:"); String c2=sc.nextLine(); u.setName(c1); u.setPassword(c2); CRUD R=new CRUD(); u2=R.select(u); //判断是否相等(这也是一部分值得完善的代码) if(u2.getName()!=null&&u2.getPassword()!=null) { System.out.println("登录成功"); i=0; }else { System.out.println("登录失败"); System.out.println("请输入重新登录还是退出:0退出,1重新登录"); String c3=sc.nextLine(); i=Integer.parseInt(c3); } } break; case 'z': //这里跟上面一样,都是在控制台输入数据,返回一个对象,做一个获取user对象的类 int i2=1; while(i2==1) { User u=new User(); GetUser getuser=new GetUser(); u=getuser.getUser(); //与数据库的连接部分 CRUD C=new CRUD(); if(! C.create(u)) {//这里值的完善,因为可能出现重名等判断,还有密码等 //成功与否的方法 System.out.println("注册成功,欢迎"+u.getName()); i2=0; }else {//这里没有注册成功的代码跟上一个差不多 System.out.println("注册失败"); System.out.println("请输入重新注册还是退出:0退出,1重新登录"); String c3=sc.nextLine(); i2=Integer.parseInt(c3); } } break; case 'c': User u2=new User(); //查询这部分就更复杂了,因为有多种查询情况 System.out.println("请选择你要查询的样子:0根据一个user名来查询,1根据多个user名来查询"); Scanner sc2 =new Scanner(System.in); int m=Integer.parseInt(sc2.nextLine()); if(m==0) { System.out.println("请输入你要查询的名字"); String ss=sc2.nextLine(); CRUD r=new CRUD(); u2=r.select2(ss); if(u2!=null) { System.out.println(u2.getName()); System.out.println(u2.getPassword()); }else System.out.println("没有"); }else { System.out.println("请输入你要查询的第一个名字"); String ss=sc2.nextLine(); System.out.println("请输入你要查询的第二个名字"); String ss2=sc2.nextLine(); CRUD rr=new CRUD(); rr.select2(ss, ss2); } break; default: System.out.println("输入不合法"); } } } }
9.标准的代码
http://blog.csdn.net/songdeitao/article/details/17484635 (别人写的)