使用JDBC进行MySQL 5.1的数据连接、查询、修改等操作练习。

目录

顺序查找

  控制游标

条件与排序查询

1. where子语句 一般格式:

2. 排序

更新、添加与删除操作

1.更新

2.添加

3.删除

 通用查询


顺序查找

所谓顺序查询,是指ResultSet对象一次只能看到一个数据行,使用 next()方法移到下一个数据行,next()方法最初的查询位置,即游标 位置,位于第一行的前面。next()方法向下(向后、数据行号大的方 向)移动游标,移动成功返回true,否则返回false。 

Example1 查询EDUC数据库中student表的全部记录。


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 
public class Example1 {
   public static void main(String[] args) {
      Connection con=null;
      Statement sql; 
      ResultSet rs;
      try{  Class.forName("com.mysql.jdbc.Driver"); //加载JDBC_MySQL驱动
      }
      catch(Exception e){}
      String uri = "jdbc:mysql://localhost:3308/EDUC?user=root&password=&useSSL=true&characterEncoding=utf-8";
      String user ="root";
      String password ="";
      try{  
         con = DriverManager.getConnection(uri,user,password); //连接代码
      }
      catch(SQLException e){ }
      try { 
          sql=con.createStatement();
          rs=sql.executeQuery("SELECT * FROM student"); //查询student表
          while(rs.next()) {
             String sno=rs.getString(1);
             String sname=rs.getString(2);
             String ssex=rs.getString(3);
             int sage=rs.getInt(4);
             String sdept=rs.getString(5);
             System.out.printf("%s\t",sno);
             System.out.printf("%s\t",sname);
             System.out.printf("%s\t",ssex); 
             System.out.printf("%d\t",sage);
             System.out.printf("%s\n",sdept);
          }
          con.close();
      }
      catch(SQLException e) { 
         System.out.println(e);
      }
  }
}

  控制游标

为了得到一个可滚动的结果集,需使用下述方法获得一个Statement对象。

 Statement stmt = con.createStatement(int type,int concurrency);

Example2 随机查询student表的2条记录,首先将游标移动到最后一行, 再获取最后一行的行号,以便获得表中的记录数目。

(本例用到了第8章例子18中的GetRandomNumber类的static方法)

public static int [] getRandomNumber(int max,int amount) 返回1至max之间的amount个不同的随机数

将数据库连接的代码单独封装到一个GetDatabaseConnection类中。


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 
public class Example2 {
   public static void main(String args[]) {
      Connection con;
      Statement sql; 
      ResultSet rs;
      con = GetDBConnection.connectDB("EDUC","root","");
      if(con == null ) return;
      try { 
          sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,//为了得到一个可滚动的结果集
                                    ResultSet.CONCUR_READ_ONLY);
          rs = sql.executeQuery("SELECT * FROM student ");
          rs.last();
          int max = rs.getRow();
          System.out.println("表共有"+max+"条记录,随机抽取2条记录:");
          int [] a =GetRandomNumber.getRandomNumber(max,2);//得到1-max之间2个不同随机数
          for(int i:a){
             rs.absolute(i);//游标移动到第i行
             String sno=rs.getString(1);
             String sname=rs.getString(2);
             String ssex=rs.getString(3);
             int sage=rs.getInt(4);
             String sdept=rs.getString(5);
             System.out.printf("%s\t",sno);
             System.out.printf("%s\t",sname);
             System.out.printf("%s\t",ssex); 
             System.out.printf("%d\t",sage);
             System.out.printf("%s\n",sdept);
          }
          con.close();
      }
      catch(SQLException e) { 
         System.out.println(e);
      }
  }
}

条件与排序查询


1. where子语句 一般格式:

select 字段 from 表名 where 条件

(1)字段值和固定值比较,例如:

select sname, ssex from student where sname='李四'

(2)字段值在某个区间范围,例如:

select * from student where sage<23  and sage>19


2. 排序

用order by子语句对记录排序

select * from student where sname like '%林%' order by sname


Example3 查询student表中姓名至少包括2个汉字、sage大于22的女生, 并按学号排序。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 
public class Example3 {
   public static void main(String args[]) {
      Connection con;
      Statement sql; 
      ResultSet rs;
      con = GetDBConnection.connectDB("EDUC","root","");
      if(con == null ) return;
      String c1=" ssex='女' and sage>22";//条件1
      String c2=" sname Like '__%'";  //条件2:至少包括两个汉字  
      String sqlStr =
      "select * from student where "+c1+" and "+c2+" order by sno";
      try { 
          sql=con.createStatement();
          rs = sql.executeQuery(sqlStr);
          while(rs.next()) { 
              String sno=rs.getString(1);
              String sname=rs.getString(2);
              String ssex=rs.getString(3);
              int sage=rs.getInt(4);
              String sdept=rs.getString(5);
              System.out.printf("%s\t",sno);
              System.out.printf("%s\t",sname);
              System.out.printf("%s\t",ssex); 
              System.out.printf("%d\t",sage);
              System.out.printf("%s\n",sdept);
          }
          con.close();
      }
      catch(SQLException e) { 
         System.out.println(e);
      }
  }
}

更新、添加与删除操作


1.更新

update  表 set 字段 = 新值 where <条件子句>


2.添加

insert into 表(字段列表) values (对应的具体的记录) 或 insert into 表 values (对应的具体的记录)


3.删除

delete from  表名 where <条件子句>


Example4 向student插入2条记录

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 
public class Example4 {
   public static void main(String args[]) {
      Connection con;
      Statement sql; 
      ResultSet rs;
      con = GetDBConnection.connectDB("EDUC","root","");
      if(con == null ) return;
      String jiLu="('201800101','王三','男',19, '软件工程系'),"+
                  "('201800102','王珊','女',20, '计算机科学系')";    //2条记录
      String sqlStr ="insert into student values "+jiLu;
      try { 
          sql=con.createStatement(); 
          int ok = sql.executeUpdate(sqlStr);
          rs = sql.executeQuery("select * from student");
          while(rs.next()) { 
              String sno=rs.getString(1);
              String sname=rs.getString(2);
              String ssex=rs.getString(3);
              int sage=rs.getInt(4);
              String sdept=rs.getString(5);
              System.out.printf("%s\t",sno);
              System.out.printf("%s\t",sname);
              System.out.printf("%s\t",ssex); 
              System.out.printf("%d\t",sage);
              System.out.printf("%s\n",sdept);
          }
          con.close();
      }
      catch(SQLException e) { 
         System.out.println("记录中sno值不能重复"+e);
      }
  }
}

Example5 中使用预处理语句向student表添加记录并查询了姓刘的记录

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; 
public class Example5 {
   public static void main(String args[]) {
      Connection con;
      PreparedStatement preSql,preSql2;  //预处理语句对象preSql
      ResultSet rs;
      con = GetDBConnection.connectDB("EDUC","root","");
      if(con == null ) return;
      String sqlStr ="insert into student values(?,?,?,?,?)";
      try { 
    
    	  
          preSql2 = con.prepareStatement(sqlStr);//得到预处理语句对象preSql
          preSql2.setString(1,"A002");       //设置第1个?代表的值
          preSql2.setString(2,"刘伟2");       //设置第2个?代表的值
          preSql2.setString(3,"男"); //设置第3个?代表的值
          preSql2.setFloat(4,20);        //设置第4个?代表的值   
          preSql2.setString(5,"通信系");        //设置第5个?代表的值
          int okk = preSql2.executeUpdate();
          sqlStr="select * from student where sname like ? ";
          preSql2 = con.prepareStatement(sqlStr);//得到预处理语句对象preSq2
          preSql2.setString(1,"刘%");       //设置第1个?代表的值
          rs = preSql2.executeQuery();
          while(rs.next()) { 
              String sno=rs.getString(1);
              String sname=rs.getString(2);
              String ssex=rs.getString(3);
              int sage=rs.getInt(4);
              String sdept=rs.getString(5);
              System.out.printf("%s\t",sno);
              System.out.printf("%s\t",sname);
              System.out.printf("%s\t",ssex); 
              System.out.printf("%d\t",sage);
              System.out.printf("%s\n",sdept);
          }
          con.close();
      }
      catch(SQLException e) { 
         System.out.println("记录中sno值不能重复"+e);
      }
  }
}

 通用查询


编写一个类,只要用户将数据库名、SQL语句传递给该类对象,那么该对象就用一个二维数组返回查询的记录。

结果集ResultSet对象rs调用getMetaData()方法返回一个 ResultSetMetaData对象(结果集的元数据对象):

ResultSetMetaData metaData = rs.getMetaData(); metaData,调用getColumnCount()方法就可以返回结果集rs中的列的数目:

int columnCount = metaData.getColumnCount();

metaData调用getColumnName(int i)方法就可以返回结果集rs中的第i列 的名字:

String columnName = metaData.getColumnName(i); 

 

Example6 将数据库名以及SQL语句传递给Query类的对象,用表格 (JTable组件)显示查询到的记录。

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class Example6 {
   public static void main(String args[]) {
      String [] tableHead;
      String [][] content; 
      JTable table ;
      JFrame win= new JFrame();
      Query findRecord = new  Query();
      findRecord.setDatabaseName("EDUC");
      findRecord.setSQL("select * from student");
      content = findRecord.getRecord();
      tableHead=findRecord.getColumnName();
      table = new JTable(content,tableHead); 
      win.add(new JScrollPane(table));
      win.setBounds(12,100,400,200);
      win.setVisible(true); 
      win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   }
}

 Query.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
public class Query {
   String databaseName="";    	//数据库名
   String SQL;        		//SQL语句
   String [] columnName;        //全部字段(列)名
   String [][] record;          //查询到的记录
   public Query() {
      try{  Class.forName("com.mysql.jdbc.Driver");//加载JDBC-MySQL驱动
      }
      catch(Exception e){}
   }
   public void setDatabaseName(String s) {
      databaseName=s.trim();
   }
   public void setSQL(String SQL) {
      this.SQL=SQL.trim();
   }
   public String[] getColumnName() {
       if(columnName ==null ){
           System.out.println("先查询记录");
           return null;
       }
       return columnName;
   }
   public String[][] getRecord() {
       startQuery();
       return record;
   }
   private void startQuery() { 
      Connection con;
      Statement sql;  
      ResultSet rs;
      String uri = 
     "jdbc:mysql://localhost:3308/"+
      databaseName+"?useSSL=true&characterEncoding=utf-8";
      try { 
        con=DriverManager.getConnection(uri,"root","");
        sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                ResultSet.CONCUR_READ_ONLY);
        rs=sql.executeQuery(SQL);
        ResultSetMetaData metaData = rs.getMetaData();
        int columnCount = metaData.getColumnCount();//字段数目 
        columnName=new String[columnCount]; 
        for(int i=1;i<=columnCount;i++){
            columnName[i-1]=metaData.getColumnName(i);
        } 
        rs.last(); 
        int recordAmount =rs.getRow();  //结果集中的记录数目
        record = new String[recordAmount][columnCount];
        int i=0;
        rs.beforeFirst();
        while(rs.next()) { 
          for(int j=1;j<=columnCount;j++){
             record[i][j-1]=rs.getString(j); //第i条记录,放入二维数组的第i行
          }
          i++;
        }
        con.close();
      }
      catch(SQLException e) {
        System.out.println("请输入正确的表名"+e);
      }
   }    
}

 

Example7 用了事务处理,将student表中sno字段是A001的 ssage的值减少2,并将减少的2增加到字段是A002的ssage上。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; 
public class Example7{
    public static void main(String args[]){
       Connection con = null;
       Statement sql;
       ResultSet rs; 
       String sqlStr;
       con = GetDBConnection.connectDB("EDUC","root","");
       if(con == null ) return;
       try{ int n = 2;
            con.setAutoCommit(false);       //关闭自动提交模式
            sql = con.createStatement();
            sqlStr = "select sname,sage from student where sno='A001'";
            rs = sql.executeQuery(sqlStr);
            rs.next();
            int h1 = rs.getInt(2);
            System.out.println("事务之前"+rs.getString(1)+"年龄:"+h1);
            sqlStr = "select sname,sage from student where sno='A002'"; 
            rs = sql.executeQuery(sqlStr);
            rs.next();
            int h2 = rs.getInt(2);
            System.out.println("事务之前"+rs.getString(1)+"年龄:"+h2);  
            h1 = h1-n;
            h2 = h2+n;
            sqlStr = "update student set sage ="+h1+" where sno='A001'";
            sql.executeUpdate(sqlStr);
            sqlStr = "update student set sage ="+h2+" where sno='A002'";
            sql.executeUpdate(sqlStr);
            con.commit(); //开始事务处理,如果发生异常直接执行catch块
            con.setAutoCommit(true); //恢复自动提交模式
            String s = "select sname,sage from student"+
                      " where sno='A001' or sno='A002'";
            rs = 
            sql.executeQuery(s);
            while(rs.next()){
               System.out.println("事务后"+rs.getString(1)+
                                  "年龄:"+rs.getFloat(2));  
            }
            con.close();
         }
         catch(SQLException e){
            try{ con.rollback();          //撤销事务所做的操作
            }
            catch(SQLException exp){}
         }
    }
}

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于使用Java JDBC连接MySQL数据库进行CRUD操作的示例代码: 首先,需要下载并添加MySQL Connector/J JAR包到项目中。 然后,可以在Java使用以下代码连接数据库: ```java import java.sql.*; public class JdbcExample { public static void main(String[] args) { String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase"; String username = "myusername"; String password = "mypassword"; try { // Connect to database Connection connection = DriverManager.getConnection(jdbcUrl, username, password); // Create statement Statement statement = connection.createStatement(); // Execute query String selectQuery = "SELECT * FROM mytable"; ResultSet resultSet = statement.executeQuery(selectQuery); // Iterate over results while (resultSet.next()) { // Get column values String value1 = resultSet.getString("column1"); int value2 = resultSet.getInt("column2"); // ... } // Insert data String insertQuery = "INSERT INTO mytable (column1, column2) VALUES ('value1', 123)"; statement.executeUpdate(insertQuery); // Update data String updateQuery = "UPDATE mytable SET column1='newvalue' WHERE column2=123"; statement.executeUpdate(updateQuery); // Delete data String deleteQuery = "DELETE FROM mytable WHERE column2=123"; statement.executeUpdate(deleteQuery); // Close resources resultSet.close(); statement.close(); connection.close(); } catch (SQLException e) { System.err.println("Error: " + e.getMessage()); } } } ``` 在以上示例中,我们首先使用`DriverManager.getConnection()`方法连接数据库。然后,创建`Statement`对象,使用`executeQuery()`方法执行SQL查询语句,并使用`executeUpdate()`方法执行SQL更新语句。最后,使用`close()`方法关闭数据库连接和资源。 请注意,以上示例仅适用于演示目的,实际使用中需要做更多的错误处理和参数化查询等安全措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值