初学java,写了一个mysql类(增删改查)

来源:互联网 发布:最优化理论 课程 推荐 编辑:程序博客网 时间:2024/06/10 19:15

献上代码,总结:

<span style="font-size:18px;">public class MySQL {private String url="jdbc:mysql://127.0.0.1/test"; //连接的是test数据库private String user="root";private String password="199624";private String name="com.mysql.jdbc.Driver";private Connection conn=null;public MySQL(){}</span>
url="jdbc:mysql://127.0.0.1/数据库名字";

name="com.mysql.jdbc.Driver";需要引入mysql的jar包

<span style="font-size:18px;">//连接数据库public void connSQL(){ try{System.out.println("连接中...");Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace(); //等待时间}try{Class.forName(name); //制定连接类型conn=DriverManager.getConnection(url,user,password); //获取连接if(!conn.isClosed()){System.out.println("数据库连接成功");}else{System.out.println("数据库已经连接");}}catch(ClassNotFoundException e){System.out.println("装置JDBC/OOBC 驱动程序失败");}catch(SQLException e){System.out.println("数据库连接失败");e.printStackTrace();}}</span>
conn=DriverManager.getConnection(url,user,password);此处建立连接
<span style="font-size:18px;">//关闭数据库public void close(){try{if(conn!=null){conn.close(); //关闭数据库}}catch(SQLException e){System.out.println("无法关闭数据库");}try{System.out.println("数据库关闭中...");Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();e.printStackTrace();}}</span>
<span style="font-size:18px;">/判断数据库是否关闭public boolean getIsClose(){boolean flag = false;try{flag=conn.isClosed();}catch(SQLException e){System.out.println("无法判断连接状态");e.printStackTrace();}if(flag){return true;}else{return false;}}</span>
Connection中的isClosed()方法能判断数据库的关闭状态,若处于关闭状态则返回true,反之则返回false

//显示数据public void showSQL(String sql){  //"SELECT * FROM (表名)"try{System.out.println("显示中...");Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}if(getIsClose()){System.out.println("数据库已经关闭,无法显示数据");}else{ResultSet rs=null;Statement stmt=null;try{stmt=conn.createStatement();rs=stmt.executeQuery(sql); //执行if(!rs.next()){System.out.println("无数据");   return;} //rs.next:遍历一次do{String uName=rs.getString(1);String uId=rs.getString(2);String uSex=rs.getString(3);System.out.println(uName+"\t"+uId+"\t"+uSex);}while(rs.next());}catch(SQLException e){System.out.println("无法显示数据");e.printStackTrace();} }}
rs=stmt.executeQuery(sql) //stmt.executeQuery(sql)表示执行sql语句,并返回结果集给rs

String uId=rs.getString(1);
String uName=rs.getString(2);
String uSex=rs.getString(3);

rs.getString(int)必须要根据表中列的顺序,如:列的顺序为name,id,sex,则rs.getString(1)表示name的值,rs.getString(2)表示id的值,rs.getString(3)表示sex的值

PS:结果集不为空时,rs.next()返回true,并且遍历了一次(第二次执行rs.next()的时候已经是下一组数据了)


这里说下PreparedStatement与Statement的区别(转载)

1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理
也就是说在对数据库只执行一次性存取的时候,用Statement对象进行处理,若要执行多次,则用PreparedStatement对象
一般来讲显示数据用PreparedStatement对象

//查找数据(按姓名查找)public void seek(Student student){ <span style="font-family: georgia, verdana, Arial, helvetica, sans-seriff;">//引入一个自定义的student类</span>PreparedStatement pre=null;ResultSet rs=null;String name=null;int id=0;int age=0;if(getIsClose()){System.out.println("数据库已经关闭,无法添加数据");}else{String sql="select * from students where name=?";try{System.out.println("查找中...");Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}try{pre=conn.prepareStatement(sql);pre.setString(1, student.getName());rs=pre.executeQuery(); //全部执行if(!rs.next()){System.out.println("数据不存在");  //可修改(姓名,学号)....return;} //rs.next()已经遍历了一次do{name=rs.getString(1);id=rs.getInt(2);age=rs.getInt(3);System.out.println(name+"\t"+id+"\t"+age);}while(rs.next());System.out.println("查找成功");}catch(SQLException e){System.out.println("查找失败");}}}

//添加数据   (需修改)public void  insert(Student student){  //引入一个自定义的student类PreparedStatement pre=null;if(getIsClose()){System.out.println("数据库已经关闭,无法添加数据");}else{String sql="insert into students(name,id,age) values(?,?,?)";try{pre=conn.prepareStatement(sql);//while(true){pre.setString(1, student.getName());pre.setInt(2, student.getId());pre.setInt(3, student.getAge());pre.addBatch();pre.executeUpdate();   //运行//    }System.out.println("添加成功");}catch(SQLException e){System.out.println("添加数据失败或数据已存在");e.printStackTrace();}}}
pre.addBatch();表示JDBC批量更新

ps:这里转一下

JDBC 批量更新 pstmt.addBatch();的问题 在数据量越大的时候 越能体现 addBatch()的优势 因为数据库的处理速度是非常惊人的 单次吞吐量很大 执行效率极高 addBatch()把若干 sql 语句装载到一起,然后一次送到数据库执行,执行需要很 短的时间 而 pstmt.executeUpdate() 是一条一条发往数据库执行的 时间都消耗在数据 库连接的传输上面 举个例子可以帮助理解: 我这有一台超大功率的面粉加工机,前者相当于 把所有农户袋装的麦子收集起 来用卡车一次送往加工厂 后者相当于农户排好队用同样的卡车一人一人的往加 工厂送麦子 麦子加工 5 分钟完成,但是每个人到工厂就得 3 小时,我数据库执 行效率再高也没用,时间都耗在传输的路上了!! 这就出现了数据传输的性能瓶颈 addBatch 就是为解决这样的问题而产生的!

//修改数据(按姓名)public void updateSQL(Student student){    <span style="font-family: Arial;">//引入一个自定义的student类</span>int rs=0;if(getIsClose()){System.out.println("数据库已经关闭,无法修改数据");}else{try{System.out.println("修改中");Thread.sleep(1000);}catch(InterruptedException e){e.printStackTrace();}String sql="update students set name=? where name=?";PreparedStatement pre=null;try{pre=conn.prepareStatement(sql);pre.setString(1, student.getName1());   //修改后pre.setString(2, student.getName());    //修改前rs=pre.executeUpdate();     /if(rs==0){System.out.println("数据不存在");return;}System.out.println("修改成功");}catch(SQLException e){System.out.println("无法修改数据");e.printStackTrace();}}}
//删除数据(按姓名)public void deleteSQl(Student student){ //引入一个自定义的student类int rs=0;if(getIsClose()){System.out.println("数据库已经关闭,无法删除数据");}else{String sql="delete from students where name=?";PreparedStatement pre=null;try{pre=conn.prepareStatement(sql); pre.setString(1,student.getName());rs=pre.executeUpdate(); if(rs==0){System.out.println("数据不存在");return;}System.out.println("删除成功");}catch(SQLException e){System.out.println("无法删除数据");e.printStackTrace();}}}}

第一次写技术类博客微笑,以前都是拜读各位大神的,若有写得不好的地方请指出,虚心求教奋斗





0 0
原创粉丝点击