JAVA 数据库的操作(增、删、改、查)
JAVA 数据库的操作(增、删、改、查)
⼀、⾸先与数据库建⽴连接
⼆、数据库的增、删、改、查
1.增
PreparedStatement继承⾃Statement,都是接⼝。这⾥我们推荐使⽤PreparedStatement,来执⾏数据库的增加操作,⽽不⽤Statement。 因为PreparedStatement可以使⽤占位符,是预编译的,批处理⽐Statement效率⾼。
PreparedStatement 是⼀个特殊的Statement对象,如果我们只是来查询或者更新数据的话,最好⽤PreparedStatement代替Statement,因为它有以下有点:
1.简化Statement中的操作
2.提⾼执⾏语句的性能
3.可读性和可维护性更好
4.安全性更好。
5.使⽤PreparedStatement能够预防SQL注⼊攻击,所谓SQL注⼊,指的是通过把SQL命令插⼊到Web表单提交或者输⼊域名或者页⾯请求的查询字符串,最终达到欺骗服务器,达到执⾏恶意SQL命令的⽬的。注⼊只对SQL语句的编译过程有破坏作⽤,⽽执⾏阶段只是把输⼊串作为数据处理,不再需要对SQL语句进⾏解析,因此也就避免了类似select * from user where name=‘aa’ and password=‘bb’ or 1=1的sql注⼊问题的发⽣。
①⾸先我们编写SQL 语句
②预编译
③设置占位符的值
需要设置整形数据就使⽤setInt()⽅法。 需要设置字符串数据就使⽤setString()⽅法。 ⽅法中的第⼀个参数是第⼏个占位符,从1开始。static  Connection con ; //声明了⼀个全局变量⽅便使⽤
1public  static  void  SQLConnect () {  try  {  Class .forName ("sql.jdbc.Driver");  //加载数据库
resultset 遍历
驱动  String url ="jdbc:mysql://localhost:3306/*****?autoReconnect=true&useSSL=false";  //*****位置填写数据库的名字  String usename ="root";  //数据库⽤户名  String psw ="root";      //数据库密码  con = DriverManager .getConnection (url ,usename ,psw ); //建⽴连接  } catch  (ClassNotFoundException e ) {  // TODO Auto -generated catch  block    e .printStackTrace ();  } catch  (SQLException e ) {  // TODO Auto -generated catch  block    e .printStackTrace ();  } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15String insertSQL = "insert into stubase(id,name,sex,dep,math,eng) values (?,?,?,?,?,?)";
1PreparedStatement stat = con .prepareStatement (insertSQL );
1
④执⾏
⑤完整代码
2.删
与上述同理,⾸先我们编写SQL语句
然后创建Statement对象(也可以⽤PreparedStatement,这⾥演⽰⼀下Statement的使⽤)
最后执⾏。
3.改
这⾥仍然使⽤的是PreparedStatement,但是我在写SQL语句时没有使⽤占位符,⽽是使⽤了转义字符,两者都可以,我本⼈也认为占位符⽐较⽅便,这⾥只是演⽰转义字符的使⽤。
4.查stat .setInt (1,100);stat .setString (2,"String");stat .setString (3,"String");stat .setString (4,"String");stat .setInt (5,100);stat .setInt (6,100);
1
2
3
4
5
6stat .executeUpdate ();
1  try  {  String insertSQL = "insert into stubase(id,name,sex,dep,math,eng) values (?,?,?,?,?,?)";  PreparedStatement stat = con .prepareStatement (insertSQL );  stat .setInt (1,100);  stat .setString (2,"String");  stat .setString (3,"String");  stat .setString (4,"String");  stat .setInt (5,100);  stat .setInt (6,100);  stat .executeUpdate ();  System .out .println (con );  } catch  (SQLException e ) {  // TODO Auto-generated catch block    e .printStackTrace ();  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 String deleteSQL = "delete from stubase where id=18000"; Statement stmt = con .createStatement (); stmt .executeUpdate (deleteSQL );
1
2
3try  {  String sql ="update stubase set "    + "name=\'"+s .getName ()    +"\',sex=\'"+s .getSex ()    +"\',dep=\'"+s .getDep ()    +"\',math="+s .getMath ()    +",eng="+s .getEng ()+" "    +"where id="+s .getId ();  PreparedStatement stat = con .prepareStatement (sql );  stat .executeUpdate ();  } catch  (SQLException e ) {  // TODO Auto-generated catch block    e .printStackTrace ();  }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
查相对⽐较⿇烦,增、删、改执⾏后的返回值位受影响的⾏数,⽽查询操作则会返回⼀张数据表。要对这张数据表进⾏操作,来获取值。①⾸先我们编写SQL 语句
这⾥我们查询全部
②创建Statement 对象⽤于执⾏SQL 语句
③执⾏SQL 语句
④遍历结果集
res初始指向查询到的数据表的第⼀⾏的上⼀⾏。
<()会使指针移动⾄下⼀⾏,它的返回值位布尔类型(boolean)。如果下⼀⾏有数据那么返回值位true,否则为false。
获取整形数据就使⽤getInt()⽅法。 获取字符串数据就使⽤getString()⽅法。 ⽅法中的参数是查询到的结果表的第⼏列,依旧从1开始。.可以在while循环中对获取的数据进⾏操作,例如添加到ArrayList中,⽅便我们的使⽤。
⑤完整代码
三、总结
我们既可以⽤Statement,也可以⽤PreparedStatement。
使⽤ Statement 对象。在对数据库只执⾏⼀次性存取的时侯,⽤ Statement 对象进⾏处理。PreparedStatement对象的开销⽐Statement⼤,对于⼀次性操作并不会带来额外的好处。
PreparedStatement可以使⽤占位符。
1、对于Statement
1.执⾏查询操作时使⽤executeQuery(String sql),返回值为Resultset 类型。 String sql = "select * from stubase";
1 Statement stmt = con .createStatement ();
1 ResultSet res = stmt .executeQuery (sql );
1 while (res .next ()) {  int  id = res .getInt (2);  String name = res .getString (3);  String sex = res .getString (4);  String dep = res .getString (5);        int  math = res .getInt (6);  int  eng = res .getInt (7); }
1
2
3
4
5
6
7
8 String sql = "select * from stubase"; Statement stmt = con .createStatement (); ResultSet result = stmt .executeQuery (sql ); while (res .next ()) {  int  id = res .getInt (2);  String name = res .getString (3);  String sex = res .getString (4);  String dep = res .getString (5);        int  math = res .getInt (6);  int  eng = res .getInt (7); }
1
2
3
4
5
6
7
8
9
10
11Resultset res = executeQuery (String sql ) ;
1
2.执⾏增、删、改操作时使⽤executeUpdate(String sql) ,返回值是整形,意义为受影响的⾏数。
2、对于PreparedStatement
1.执⾏查询操作时使⽤executeQuery( ),返回值为Resultset 类型。
2.执⾏增、删、改操作时使⽤executeUpdate( ) ,返回值是整形,意义为受影响的⾏数。int  res = executeUpdate (String sql ) ;1Resultset res = executeQuery () ;1int  res = executeUpdate () ;1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。