1 package star; 2 3 import java.sql.*; 4 5 6 //Statement对象每次执行SQL语句时,都会对它进行编译。相当于SQL语句执行多次时,Statement对象会使 7 //数据库频繁编译相同的SQL语句,从而降低数据库的访问效率。 8 //所以Statement提供了一个子类PrearedStatement。PreparedStatement对象对SQL语句进行预编译,预编译 9 //的信息储存在PreparedStatement对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的 10 //数据,而不需要对SQL语句再次编译去查询数据库,这样大大提高了数据访问效率 11 public class Pres2{ 12 public static void main(String[] args)throws SQLException { 13 Connection conn = null; 14 PreparedStatement preStmt=null; 15 try { 16 //加载数据库驱动 17 Class.forName("com.mysql.jdbc.Driver"); 18 //创建应用程序与数据库连接的Connection对象 19 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/star?useSSL=false","root","root"); 20 //执行的SQL语句 21 /*创建语句,里面的参数等可以用问号代替pstmtInsert.setString(1,"a"); 22 给第一个问号赋值"a";pstmtInsert.setString(2,"b");//给第二个问号赋值"b"*/ 23 String sql="insert into users(name,password,email,birthday)"+"values(?,?,?,?)"; 24 //1.创建执行SQL语句的PreparedStatement对象 25 preStmt=conn.prepareStatement(sql); 26 //2.为SQL语句中的参数赋值 27 preStmt.setString(1,"ac"); 28 preStmt.setString(2,"123456"); 29 preStmt.setString(3,"ac@sina.com"); 30 preStmt.setString(4,"1799-12-12"); 31 //3.执行SQL 32 preStmt.executeLargeUpdate(); 33 }catch (ClassNotFoundException e){ 34 e.printStackTrace(); 35 }finally { 36 //释放资源 37 if (preStmt!=null){ 38 try{ 39 preStmt.close(); 40 }catch (SQLException e){e.printStackTrace();} 41 conn=null; 42 } 43 } 44 } 45 } 46 47 48 49 50 //Result主要用于存储结果集,可以通过next()方法有前向后逐个获取结果集中的数据,如果想获取结果集 51 //中任意数据,则需要在创建Statement对象时,设置2个ResultSet定义的常量 52 53 class Example03{ 54 public static void main(String[] args){ 55 Connection conn=null; 56 Statement stmt=null; 57 try{ 58 //加载驱动 59 Class.forName("com.mysql.jdbc.Driver"); 60 //连接数据库,获取Connection对象 61 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/star?useSSL=false","root","root"); 62 String sql="select * from users"; 63 //2。创建Statement对象并设置常量 64 Statement st=conn.createStatement( 65 ResultSet.TYPE_SCROLL_INSENSITIVE,//常量Result.TYPE_SCROLL_INSENITIVE表示结果集可以滚动 66 ResultSet.CONCUR_READ_ONLY//常量Result.CONCUR_READ_ONLY表示以只读形式打开结果集 67 ); 68 //3.执行SQL并将获取的数据信息存放在ResultSet中 69 ResultSet rs=st.executeQuery(sql); 70 //4.取出ResultSet中指定数据的信息 71 System.out.println("第二条数据的name值为"); 72 rs.absolute(2);//将指针定位到结果集中的第2行数据 73 System.out.println(rs.getString("name")); 74 System.out.println("第一条数据的email为"); 75 rs.beforeFirst();//将游标移动到开头,第一行之前 76 rs.next();//将游标向后移动,因为移动到了第一行之前 77 System.out.println(rs.getString("email")); 78 System.out.println("第四条数据的name值为"); 79 rs.absolute(4); 80 //rs.afterLast();//将指针移动到结果集中最后一条数据之后;rs.previous();//将游标向前滚动 81 82 }catch (Exception e){ 83 e.printStackTrace(); 84 }finally { 85 if(stmt!=null){ 86 try { 87 stmt.close(); 88 }catch (SQLException e){ 89 e.printStackTrace(); 90 } 91 stmt=null; 92 } 93 if(conn != null){ 94 try{ 95 conn.close(); 96 }catch (SQLException e){ 97 e.printStackTrace(); 98 } 99 conn=null; 100 101 } 102 } 103 } 104 } 105 /* 106 总,先获取Connection对象连接数据库,然后通过Connection对象创建Statement对象并设置所需的两个常量 107 ,然后执行SQL语句,将获取的数据信息存放在ResultSet中,最后通过ResultSet对象的absolute()方法指定游标移动 108 指定数据行并输出*/