《Mysql必读JDBC数据库的使用操作总结》要点: 本文介绍了Mysql必读JDBC数据库的使用操作总结,希望对您有用。如果有疑问,可以联系我们。
JDBC是一组能够执行SQL语句的APIMYSQL应用
由于传统的数据库操作方式必要程序员掌握各个不同的数据库的API,极其不便MYSQL应用
因此java定义了JDBC这一尺度的接口和类,为程序员操作数据库提供了统一的方式MYSQL应用
JDBC的操作方式比拟单一,由五个流程组成:
1.通过数据库厂商提供的JDBC类库向DriverManager注册数据库驱动MYSQL应用
2.使用DriverManager提供的getConnection()办法连接到数据库MYSQL应用
3.通过数据库的连接对象的createStatement办法建立SQL语句对象MYSQL应用
4.执行SQL语句,并将成果集合返回到ResultSet中MYSQL应用
5.使用while循环读取成果MYSQL应用
6.关闭数据库资源MYSQL应用
下面来看看具体操作Mysql数据库的办法MYSQL应用
准备工作MYSQL应用
首先我们必要建立一个数据库和一张简单的表 MYSQL应用
代码如下:
mysql> create database person; Query OK,1 row affected (0.00 sec)
mysql> use person; Database changed mysql> create table student( ??? -> id int, ??? -> name varchar(20), ??? -> birth year ??? -> ) default charset=utf8; Query OK,0 rows affected (0.10 sec) MYSQL应用
然后往里面插入几条数据
代码如下:
mysql> insert into student values ??? -> (1,'张三',1990), ??? -> (2,'李四',1991), ??? -> (3,'王五',1992); Query OK,3 rows affected (0.02 sec) Records: 3? Duplicates: 0? Warnings: 0
这样一张简单的表就建好了
代码如下:
mysql> select * from student; +------+--------+-------+ | id?? | name?? | birth | +------+--------+-------+ |??? 1 | 张三?? |? 1990 | |??? 2 | 李四?? |? 1991 | |??? 3 | 王五?? |? 1992 | +------+--------+-------+ ?rows in set (0.00 sec)
接下来,去mysql官网下载数据库连接器这个包
其中这个包里面含有一份文档,里面列举了基本的使用办法,可以参考MYSQL应用
我们的操作也是依照这份文档中的内容进行,然后最主要的地方就是导入这个jar包MYSQL应用
MYSQL应用
为了操作便利,这里使用eclipse来导入MYSQL应用
右键项目-->构件路径-->添加外部归档,添加好了之后如下所示MYSQL应用
MYSQL应用
现在我们正式开始使用java来操作mysql数据库MYSQL应用
JDBC操作实例1:最简单的查询操作 MYSQL应用
代码如下:
import java.sql.*;
public class Demo { ??? //为了代码紧凑性,暂时抛出所有异常 ??? public static void main(String[] args) throws Exception { ??????? //注册数据库驱动 ??????? Class.forName("com.mysql.jdbc.Driver"); ??????? //建立数据库连接 ??????? //参数一:jdbc:mysql//地址:端口/数据库,参数二:用户名,参数三:暗码 ??????? Connection conn = DriverManager.getConnection ??????????????? ("jdbc:mysql://localhost:3306/person","root","admin"); ??????? //创建SQL语句 ??????? Statement st = conn.createStatement(); ??????? //执行语句,返回结果 ??????? ResultSet rt = st.executeQuery("show tables"); ??????? //循环取出结果 ??????? while(rt.next()) { ??????????? //获取字段 ??????????? System.out.println(rt.getString("Tables_in_person")); ??????? } ??????? //关闭资源,最先打开的最后关 ??????? rt.close(); ??????? st.close(); ??????? conn.close(); ??? } } MYSQL应用
运行成果:student
如此便可执行show tables语句查询出当前数据库含有多少张表MYSQL应用
其中rt.getString()办法是获取字段,这点需要注意MYSQL应用
关闭资源的方式也与以往相反MYSQL应用
不过,上面的操作方式灵活性不大,而且不严谨MYSQL应用
实例2:优化的查询操作 MYSQL应用
代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
public class Demo { ??? public static void main(String[] args) { ??????? String url = "jdbc:mysql://localhost:3306/person"; ??????? String user = "root"; ??????? String pwd = "admin"; ??????? String sql = "select * from student";
??????? Connection conn = null; ??????? Statement st = null; ??????? ResultSet rs = null; ??????? try { ??????????? Class.forName("com.mysql.jdbc.Driver"); ??????????? conn = DriverManager.getConnection(url,user,pwd); ??????????? st = conn.createStatement(); ??????????? //执行查询语句,另外也可以用execute(),代表执行任何SQL语句 ??????????? rs = st.executeQuery(sql); ??????????? while(rs.next()) { ??????????????? System.out.println(rs.getObject(1) + "? " + ??????????????????????? rs.getObject(2) + "? " + rs.getInt("birth")); ??????????? } ??????? //分别捕捉异常 ??????? } catch (ClassNotFoundException e) { ??????????? e.printStackTrace(); ??????? } catch (SQLException e) { ??????????? e.printStackTrace(); ??????? } finally { ??????????? try { ??????????????? //判断资源是否存在 ??????????????? if(rs != null) { ??????????????????? rs.close(); ??????????????????? //显示的设置为空,提示gc回收 ??????????????????? rs = null; ??????????????? } ??????????????? if(st != null) { ??????????????????? st.close(); ??????????????????? st = null; ??????????????? } ??????????????? if(conn != null) { ??????????????????? conn.close(); ??????????????????? conn = null; ??????????????? } ??????????? } catch (SQLException e) { ??????????????? e.printStackTrace(); ??????????? }??? ??????? } ??? } } MYSQL应用
运行成果:
MYSQL应用
这里把异常给分别捕获了,而且相关的字符串全部用变量定义MYSQL应用
需要注意下循环取出数据里面的getInt()办法,此处必须知道类型和字段才能取出MYSQL应用
如果不知道可以使用getObject(1)取出第一列,getObject(2)取出第二列,以此类推MYSQL应用
实例3:自定义变量插入到数据库 MYSQL应用
代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;
public class Demo { ??? public static void main(String[] args) { ??????? //参数检查 ??????? if (args.length != 3) { ??????????? System.out.println("参数形式不对"); ??????????? System.exit(0); ??????? } ??????? String id = args[0]; ??????? String name = args[1]; ??????? String birth = args[2]; ??????? String sql = "insert into student values(" + id + ",'" + name + ??????????????? "'," + "'" + birth + "')"; ??????? System.out.println(sql);
??????? String url = "jdbc:mysql://localhost:3306/person"; ??????? String user = "root"; ??????? String pwd = "admin";
??????? Connection conn = null; ??????? Statement st = null; ??????? try { ??????????? Class.forName("com.mysql.jdbc.Driver"); ??????????? conn = DriverManager.getConnection(url,pwd); ??????????? st = conn.createStatement(); ??????????? //注意,此处是excuteUpdate()办法执行 ??????????? st.executeUpdate(sql);??????? ??????? //分别捕获异常 ??????? } catch (ClassNotFoundException e) { ??????????? e.printStackTrace(); ??????? } catch (SQLException e) { ??????????? e.printStackTrace(); ??????? } finally { ??????????? try { ??????????????? if(st != null) { ??????????????????? st.close(); ??????????????????? st = null; ??????????????? } ??????????????? if(conn != null) { ??????????????????? conn.close(); ??????????????????? conn = null; ??????????????? } ??????????? } catch (SQLException e) { ??????????????? e.printStackTrace(); ??????????? }??? ??????? } ??? } } MYSQL应用
运行成果:
MYSQL应用
这里运行必要设置自变量,窗口中右键-->运行方式-->运行配置MYSQL应用
然后在自变量里面写4 susan 1993,我没有写中文,因为发生乱码,目前还不清楚原因MYSQL应用
需要注意的是,执行插入的SQL语句比拟难写,最好是打印出SQL语句用以检查MYSQL应用
实例4:PreparedStatement应用 MYSQL应用
从上面的Demo可以看到,插入数据的时候,SQL操作相当未便MYSQL应用
这里可以使用PreparedStatement对象来简化SQL语句的建立 MYSQL应用
代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;
public class Demo {MYSQL应用
??? public static void main(String[] args) { ??????? if (args.length != 3) { ??????????? System.out.println("参数形式纰谬"); ??????????? System.exit(0); ??????? } ??????? String id = args[0]; ??????? String name = args[1]; ??????? String birth = args[2];
??????? String url = "jdbc:mysql://localhost:3306/person"; ??????? String user = "root"; ??????? String pwd = "admin";MYSQL应用
??????? Connection conn = null; ??????? //声明PreparedStatement对象的引用 ??????? PreparedStatement pst = null; ??????? try { ??????????? Class.forName("com.mysql.jdbc.Driver"); ??????????? conn = DriverManager.getConnection(url,pwd); ??????????? //使用?代替变量 ??????????? pst = conn.prepareStatement("insert into student values (?,?,?)"); ??????????? //给指定参数的位置设定变量 ??????????? pst.setString(1,id); ??????????? pst.setString(2,name); ??????????? pst.setString(3,birth); ??????????? pst.executeUpdate(); ??????? } catch (ClassNotFoundException e) { ??????????? e.printStackTrace(); ??????? } catch (SQLException e) { ??????????? e.printStackTrace(); ??????? } finally { ??????????? try { ??????????????? if(pst != null) { ??????????????????? pst.close(); ??????????????????? pst = null; ??????????????? } ??????????????? if(conn != null) { ??????????????????? conn.close(); ??????????????????? conn = null; ??????????????? } ??????????? } catch (SQLException e) { ??????????????? e.printStackTrace(); ??????????? }??? ??????? } ??? } } MYSQL应用
运行成果:
MYSQL应用
实例5:Batch批处理 MYSQL应用
代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;
public class Demo {MYSQL应用
??? public static void main(String[] args) {MYSQL应用
??????? String url = "jdbc:mysql://localhost:3306/person"; ??????? String user = "root"; ??????? String pwd = "admin";MYSQL应用
??????? Connection conn = null; ??????? Statement st = null; ??????? try { ??????????? Class.forName("com.mysql.jdbc.Driver"); ??????????? conn = DriverManager.getConnection(url,pwd); ??????????? st = conn.createStatement(); ??????????? //添加批处理 ??????????? st.addBatch("insert into student values(6,'Jerry','1995')"); ??????????? st.addBatch("insert into student values(7,'Greg','1996')"); ??????????? st.addBatch("insert into student values(8,'Ryan','1997')"); ??????????? //执行批处理 ??????????? st.executeBatch(); ??????? } catch (ClassNotFoundException e) { ??????????? e.printStackTrace(); ??????? } catch (SQLException e) { ??????????? e.printStackTrace(); ??????? } finally { ??????????? try { ??????????????? if(st != null) { ??????????????????? st.close(); ??????????????????? st = null; ??????????????? } ??????????????? if(conn != null) { ??????????????????? conn.close(); ??????????????????? conn = null; ??????????????? } ??????????? } catch (SQLException e) { ??????????????? e.printStackTrace(); ??????????? }??? ??????? } ??? } } MYSQL应用
运行成果:
MYSQL应用
批处理比拟简单,只需先建立Statement对象,然后逐个添加批处理即可MYSQL应用
最后使用executeBatch()办法执行批处理MYSQL应用
此外,PreparedStatement对象也可以使用批处理 MYSQL应用
代码如下:
PreparedStatement ps = conn.prepareStatement("insert into student values(?,?)"); ps.setInt(1,8); ps.setString(2,"GG"); ps.setString(3,"1996"); ps.addBatch(); ps.executeBatch();
实例6:Transaction事务处理
事务处理是要求sql以单元的形式更新数据库,要求其确保一致性MYSQL应用
如银行的转账业务,一方转出后,另一方则增加MYSQL应用
如果出现异常,那么所有的操作则会回滚 MYSQL应用
代码如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;
public class Demo {MYSQL应用
??? public static void main(String[] args) {MYSQL应用
??????? String url = "jdbc:mysql://localhost:3306/person"; ??????? String user = "root"; ??????? String pwd = "admin";MYSQL应用
??????? Connection conn = null; ??????? Statement st = null; ??????? try { ??????????? Class.forName("com.mysql.jdbc.Driver"); ??????????? conn = DriverManager.getConnection(url,pwd); ??????????? //撤消自动提交 ??????????? conn.setAutoCommit(false); ??????????? st = conn.createStatement(); ??????????? st.addBatch("insert into student values(6,'1997')"); ??????????? st.executeBatch(); ??????????? //提交后设置自动提交 ??????????? conn.commit(); ??????????? conn.setAutoCommit(true); ??????? } catch (ClassNotFoundException e) { ??????????? e.printStackTrace();
??????? } catch (SQLException e) { ??????????? e.printStackTrace();MYSQL应用
??????????? if(conn != null) { ??????????????? try { ??????????????????? //出现异常则回滚操作,然后设置自动提交 ??????????????????? conn.rollback(); ??????????????????? conn.setAutoCommit(true); ??????????????? } catch (SQLException e1) { ??????????????????? e1.printStackTrace(); ??????????????? } ??????????? } ??????? } finally { ??????????? try { ??????????????? if(st != null) { ??????????????????? st.close(); ??????????????????? st = null; ??????????????? } ??????????????? if(conn != null) { ??????????????????? conn.close(); ??????????????????? conn = null; ??????????????? } ??????????? } catch (SQLException e) { ??????????????? e.printStackTrace(); ??????????? }??? ??????? } ??? } } MYSQL应用
运行成果:
MYSQL应用 《Mysql必读JDBC数据库的使用操作总结》是否对您有启发,欢迎查看更多与《Mysql必读JDBC数据库的使用操作总结》相关教程,学精学透。编程之家PHP学院为您提供精彩教程。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|