献上代码,总结:
<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的区别(转载)
//查找数据(按姓名查找)
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();
}
}
}
}
第一次写技术类博客
![微笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif)
![奋斗](http://static.blog.csdn.net/xheditor/xheditor_emot/default/struggle.gif)