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小时内删除。
发表评论