本文讲述2点:

一. jdbc 操作 MySQL 。(封装一个JdbcUtils.java类,实现数据库表的增删改查)

1. 建立数据库连接

Class.forName(DRIVER);

connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

2.用PrepareStatement执行sql语句

pstmt = connection.prepareStatement(sql);

3. 获得执行Sql结果(int result)或结果集合(ResultSet)

int result = pstmt.executeUpdate();  (增,删,改)

ResultSet resultSet = pstmt.executeQuery(); (查询)

// 获取所有列的信息

ResultSetMetaData metaData = resultSet.getMetaData();

二. 用Java反射机制返回JavaBean,List<JavaBean>

看JdbcUtils.java 中具体代码。

------------------------------------------------------------------------------------------------------------

程序思路:

用eclipse建立一个java 工程,访问mysql数据库。数据库名称:mydb,表格名称:userinfo. user表格有三个属性(id , username , pswd)

工程目录:

1 JdbcUtils.java --封装数据库操作的类

  1. package com.jdbc.dbutils;
  2. import java.lang.reflect.Field;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.ResultSetMetaData;
  8. import java.sql.SQLException;
  9. import java.util.ArrayList;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. import com.jdbc.data.UserInfo;
  14. import com.mysql.jdbc.Driver;
  15. public class JdbcUtils {
  16. // 定义数据库的用户名
  17. private final String USERNAME = "root";
  18. // 定义数据库的密码
  19. private final String PASSWORD = "123456";
  20. // 定义数据库的驱动信息
  21. private final String DRIVER = "com.mysql.jdbc.Driver";
  22. // 定义访问数据库的地址
  23. private final String URL = "jdbc:mysql://localhost:3306/mydb";
  24. // 定义访问数据库的连接
  25. private Connection connection;
  26. // 定义sql语句的执行对象
  27. private PreparedStatement pstmt;
  28. // 定义查询返回的结果集合
  29. private ResultSet resultSet;
  30. public JdbcUtils() {
  31. // TODO Auto-generated constructor stub
  32. try {
  33. Class.forName(DRIVER);
  34. System.out.println("注册驱动成功!!");
  35. } catch (ClassNotFoundException e) {
  36. // TODO Auto-generated catch block
  37. System.out.println("注册驱动失败!!");
  38. }
  39. }
  40. // 定义获得数据库的连接
  41. public Connection getConnection() {
  42. try {
  43. connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  44. } catch (Exception e) {
  45. // TODO: handle exception
  46. System.out.println("Connection exception !");
  47. }
  48. return connection;
  49. }
  50. /**
  51. * 完成对数据库标的增加删除和修改的操作
  52. *
  53. * @param sql
  54. * @param params
  55. * @return
  56. * @throws SQLException
  57. */
  58. public boolean updateByPreparedStatement(String sql, List<Object> params)
  59. throws SQLException {
  60. boolean flag = false;
  61. int result = -1;// 表示当用户执行增加删除和修改的操作影响的行数
  62. int index = 1; // 表示 占位符 ,从1开始
  63. pstmt = connection.prepareStatement(sql);
  64. if (params != null && !params.isEmpty()) {
  65. for (int i = 0; i < params.size(); i++) {
  66. pstmt.setObject(index++, params.get(i)); // 填充占位符
  67. }
  68. }
  69. result = pstmt.executeUpdate();
  70. flag = result > 0 ? true : false;
  71. return flag;
  72. }
  73. /**
  74. * 查询返回单条记录
  75. *
  76. * @param sql
  77. * @param params
  78. * @return
  79. * @throws SQLException
  80. */
  81. public  Map<String, Object> findSimpleResult(String sql, List<Object> params)
  82. throws SQLException {
  83. Map<String, Object> map = new HashMap<String, Object>();
  84. pstmt = connection.prepareStatement(sql);
  85. int index = 1;
  86. if (params != null && !params.isEmpty()) {
  87. for (int i = 0; i < params.size(); i++) {
  88. pstmt.setObject(index++, params.get(i));
  89. }
  90. }
  91. resultSet = pstmt.executeQuery(); // 返回查询结果
  92. ResultSetMetaData metaData = pstmt.getMetaData(); // 获取 结果中,一行所有列的结果
  93. int cols_len = metaData.getColumnCount(); // 获得列的总数
  94. while (resultSet.next()) {
  95. for (int i = 0; i < cols_len; i++) {
  96. String col_name = metaData.getColumnName(i + 1); // 获得第i列的字段名称
  97. Object col_value = resultSet.getObject(col_name);// 返回 第i列的内容值
  98. if (col_value == null) {
  99. col_value = "";
  100. }
  101. map.put(col_name, col_value);
  102. }
  103. }
  104. return map;
  105. }
  106. /**
  107. * 查询返回多条记录
  108. *
  109. * @param sql
  110. * @param params
  111. * @return
  112. * @throws SQLException
  113. */
  114. public List<Map<String, Object>> findMoreResult(String sql,
  115. List<Object> params) throws SQLException {
  116. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  117. pstmt = connection.prepareStatement(sql);
  118. int index = 1; // 表示占位符
  119. if (params != null && !params.isEmpty()) {
  120. for (int i = 0; i < params.size(); i++) {
  121. pstmt.setObject(index++, params.get(i));
  122. }
  123. }
  124. resultSet = pstmt.executeQuery(); // 返回查询结果集合
  125. ResultSetMetaData metaData = resultSet.getMetaData(); // 获得列的结果
  126. while (resultSet.next()) {
  127. Map<String, Object> map = new HashMap<String, Object>();
  128. int cols_len = metaData.getColumnCount(); // 获取总的列数
  129. for (int i = 0; i < cols_len; i++) {
  130. String col_name = metaData.getColumnName(i + 1); // 获取第 i列的字段名称
  131. // ,列计算从1开始
  132. Object col_value = resultSet.getObject(col_name); // 获取第i列的内容值
  133. if (col_value == null) {
  134. col_value = "";
  135. }
  136. map.put(col_name, col_value);
  137. }
  138. list.add(map);
  139. }
  140. return list;
  141. }
  142. /**
  143. * 查询返回单个JavaBean(使用java反射机制)
  144. *
  145. * @param sql
  146. * @param params
  147. * @param cls
  148. * @return
  149. * @throws Exception
  150. */
  151. public <T> T findSimpleRefResult(String sql, List<Object> params,
  152. Class<T> cls) throws Exception {
  153. T resultObject = null;
  154. int index = 1; // 占位符
  155. pstmt = connection.prepareStatement(sql);
  156. if (params != null && !params.isEmpty()) {
  157. for (int i = 0; i < params.size(); i++) {
  158. pstmt.setObject(index++, params.get(i)); // 填充占位符
  159. }
  160. }
  161. resultSet = pstmt.executeQuery(); // 获取查询结果
  162. ResultSetMetaData metaData = resultSet.getMetaData(); // 获取列的信息
  163. int cols_len = metaData.getColumnCount(); // 获取总的列数
  164. while (resultSet.next()) {
  165. // 通过反射机制创建实例
  166. resultObject = cls.newInstance(); // java反射机制
  167. for (int i = 0; i < cols_len; i++) {
  168. String col_name = metaData.getColumnName(i + 1); // 获取第i列的名称
  169. Object col_value = resultSet.getObject(col_name); // 获取第i列的值
  170. if (col_value == null) {
  171. col_value = "";
  172. }
  173. Field field = cls.getDeclaredField(col_name);
  174. field.setAccessible(true);// 打开 JavaBean的访问 private权限
  175. field.set(resultObject, col_value);
  176. }
  177. }
  178. return resultObject;
  179. }
  180. /** 查询返回多个JavaBean(通过java反射机制)
  181. * @param sql
  182. * @param params
  183. * @param cls
  184. * @return
  185. * @throws Exception
  186. */
  187. public <T> List<T> findMoreRefResult(String sql, List<Object> params,
  188. Class<T> cls) throws Exception {
  189. List<T> list = new ArrayList<T>();
  190. int index = 1; //占位符
  191. pstmt = connection.prepareStatement(sql);
  192. if (params != null && !params.isEmpty()) {
  193. for (int i = 0; i < params.size(); i++) {
  194. pstmt.setObject(index++, params.get(i));
  195. }
  196. }
  197. resultSet = pstmt.executeQuery(); // 返回查询结果集合
  198. ResultSetMetaData metaData = resultSet.getMetaData(); // 返回列的信息
  199. int cols_len = metaData.getColumnCount(); // 结果集中总的列数
  200. while (resultSet.next()) {
  201. // 通过反射机制创建一个java实例
  202. T resultObject = cls.newInstance();
  203. for (int i = 0; i < cols_len; i++) {
  204. String col_name = metaData.getColumnName(i + 1); // 获得第i列的名称
  205. Object col_value = resultSet.getObject(col_name); // 获得第i列的内容
  206. if (col_value == null) {
  207. col_value = "";
  208. }
  209. Field field = cls.getDeclaredField(col_name);
  210. field.setAccessible(true); // 打开JavaBean的访问private权限
  211. field.set(resultObject, col_value);
  212. }
  213. list.add(resultObject);
  214. }
  215. return list;
  216. }
  217. /**关闭数据库访问
  218. * @throws SQLException
  219. */
  220. public void releaseConn() throws SQLException{
  221. if (resultSet!=null) {
  222. resultSet.close();
  223. }
  224. if (pstmt!=null) {
  225. pstmt.close();
  226. }
  227. if (connection!=null) {
  228. connection.close();
  229. }
  230. }
  231. }

2. UserInfo.java (用来验证java反射机制的JavaBean , 属性名称和数据表userinfo的字段完全一致)

  1. package com.jdbc.data;
  2. import java.io.Serializable;
  3. public class UserInfo implements Serializable {
  4. /**
  5. *
  6. */
  7. private static final long serialVersionUID = 1L;
  8. private int id;
  9. private String username;
  10. private String pswd;
  11. public UserInfo() {
  12. // TODO Auto-generated constructor stub
  13. }
  14. public int getId() {
  15. return id;
  16. }
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20. public String getUsername() {
  21. return username;
  22. }
  23. public void setUsername(String username) {
  24. this.username = username;
  25. }
  26. public String getPswd() {
  27. return pswd;
  28. }
  29. public void setPswd(String pswd) {
  30. this.pswd = pswd;
  31. }
  32. public static long getSerialversionuid() {
  33. return serialVersionUID;
  34. }
  35. @Override
  36. public String toString() {
  37. return "UserInfo [id=" + id + ", username=" + username + ", pswd="
  38. + pswd + "]";
  39. }
  40. }

3. Test_insert.java  测试添加

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import com.jdbc.dbutils.JdbcUtils;
  6. public class Test_Insert {
  7. /**
  8. * @param args
  9. * @throws SQLException
  10. */
  11. public static void main(String[] args) throws SQLException {
  12. JdbcUtils jdbcUtils = new JdbcUtils();
  13. jdbcUtils.getConnection();
  14. //增加一条记录。新增一个用户信息 uername = "jack" , password = "admin"
  15. String sql = "insert into userinfo(username,pswd) values(?,?)";
  16. List<Object> params = new ArrayList<Object>();
  17. params.add("jack");
  18. params.add("admin");
  19. try {
  20. boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
  21. System.out.println("添加一条记录: "+flag);
  22. } catch (Exception e) {
  23. // TODO: handle exception
  24. e.printStackTrace();
  25. }finally{
  26. jdbcUtils.releaseConn();
  27. }
  28. }
  29. }

运行结果:

(用同样的方法,再增加一条记录username="rose",pswd="123"),此时数据库共2条记录。如下图:

4. Test_FindMore.java (查询多条记录)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.jdbc.dbutils.JdbcUtils;
  7. public class Test_FindMore {
  8. /** 返回多条记录
  9. * @param args
  10. * @throws Exception
  11. */
  12. public static void main(String[] args) throws Exception {
  13. // TODO Auto-generated method stub
  14. JdbcUtils jdbcUtils = new JdbcUtils();
  15. jdbcUtils.getConnection();
  16. String sql = "select * from userinfo";
  17. try {
  18. List<Map<String, Object>> list = jdbcUtils.findMoreResult(sql, null);
  19. System.out.println(list);
  20. } catch (Exception e) {
  21. // TODO: handle exception
  22. e.printStackTrace();
  23. }finally{
  24. jdbcUtils.releaseConn();
  25. }
  26. }
  27. }

运行结果:

5. Test_FindSimple.java (查询返回单条记录)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.jdbc.dbutils.JdbcUtils;
  7. public class Test_FindSimple {
  8. /**查询返回一条记录
  9. * @param args
  10. * @throws SQLException
  11. */
  12. public static void main(String[] args) throws SQLException {
  13. // TODO Auto-generated method stub
  14. JdbcUtils jdbcUtils = new JdbcUtils();
  15. jdbcUtils.getConnection();
  16. String sql = "select * from userinfo where username = ?";
  17. List<Object> params = new ArrayList<Object>();
  18. params.add("rose");
  19. try {
  20. Map<String, Object> map = jdbcUtils.findSimpleResult(sql, params);
  21. System.out.println(map);
  22. } catch (Exception e) {
  23. // TODO: handle exception
  24. e.printStackTrace();
  25. }finally{
  26. jdbcUtils.releaseConn();
  27. }
  28. }
  29. }

运行结果:

6.Test_RefMore.java 查询返回List<JavaBean>(使用Java反射机制)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.List;
  4. import java.util.Map;
  5. import com.jdbc.data.UserInfo;
  6. import com.jdbc.dbutils.JdbcUtils;
  7. public class Test_RefMore {
  8. /**返回List<JavaBean> (用Java反射机制)
  9. * @param args
  10. * @throws SQLException
  11. */
  12. public static void main(String[] args) throws SQLException {
  13. // TODO Auto-generated method stub
  14. JdbcUtils jdbcUtils = new JdbcUtils();
  15. jdbcUtils.getConnection();
  16. String sql = "select * from userinfo";
  17. try {
  18. List<UserInfo> list = jdbcUtils.findMoreRefResult(sql, null , UserInfo.class);
  19. System.out.println(list);
  20. } catch (Exception e) {
  21. // TODO: handle exception
  22. e.printStackTrace();
  23. }finally{
  24. jdbcUtils.releaseConn();
  25. }
  26. }
  27. }

7. Test_RefSimple.java 查询返回单个JavaBean (使用Java反射机制)

  1. package com.jdbc.test;
  2. import java.sql.SQLException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import com.jdbc.data.UserInfo;
  7. import com.jdbc.dbutils.JdbcUtils;
  8. public class Test_RefSimple {
  9. /**返回一个JavaBean (用Java反射机制)
  10. * @param args
  11. * @throws SQLException
  12. */
  13. public static void main(String[] args) throws SQLException {
  14. // TODO Auto-generated method stub
  15. JdbcUtils jdbcUtils = new JdbcUtils();
  16. jdbcUtils.getConnection();
  17. String sql = "select * from userinfo where username = ?";
  18. List<Object> params = new ArrayList<Object>();
  19. params.add("rose");
  20. try {
  21. UserInfo userInfo = jdbcUtils.findSimpleRefResult(sql, params, UserInfo.class);
  22. System.out.println(userInfo);
  23. } catch (Exception e) {
  24. // TODO: handle exception
  25. e.printStackTrace();
  26. }finally{
  27. jdbcUtils.releaseConn();
  28. }
  29. }
  30. }

运行结果:

jdbc操作mysql的更多相关文章

  1. JDBC操作MySQL数据库案例

    JDBC操作MySQL数据库案例 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepared ...

  2. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  3. 原生Jdbc操作Mysql数据库开发步骤

    原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤:        1.导入数据库驱动包       ...

  4. [自动化专题]JDBC操作mysql时遇到的拦路虎

    在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...

  5. java数据库 JDBC操作MySQL数据库常用API 部门表和员工表 创建表 添加数据 查询数据

    package com.swift.department; import java.sql.Connection; import java.sql.PreparedStatement; import ...

  6. JDBC操作MySQL(crud)

    这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...

  7. 使用JDBC操作MySQL

    使用JDBC操作MySQL 步骤 加载驱动 连接数据库 操作数据库(增删改查) 关闭结果集,操作,数据库 准备工作 java连接MySQL的jar包 加载数据库驱动 public class Load ...

  8. jdbc操作mysql(三):利用注解封装

    案例五:利用注解封装 重复步骤 我们使用jdbc操作mysql时发现,操作不同表中数据,所写的方法基本相同:比如我们根据id向用户表添加数据,根据id删除商品表的数据,或者查询所有数据并用list集合 ...

  9. JavaWeb用Jdbc操作MySql数据库(一)

    一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...

随机推荐

  1. angular的post请求,SpringMVC后台接收不到参数值的解决方案

    这是我后台SpringMVC控制器接收isform参数的方法,只是简单的打出它的值: @RequestMapping(method = RequestMethod.POST) @ResponseBod ...

  2. bzoj 1005 HNOI2008 明明的烦恼

    这题做的我欲哭无泪啊…… 我已经没心情多说啥了…… 高精度T啊!我太弱啊!改了一天啊!还不如滚粗啊! 想好式子在写啊! 能用高精度乘单精度就不要用高精度乘高精度啊!     能用高精度除单精度就不要用 ...

  3. NDK中, 如何提高脚本式语言的可读性

    原文来自安卓教程网android.662p.com,转载时请注明文章的来源:http://android.662p.com/thread-5245-1-1.html [概述]     NDK开发中, ...

  4. 【转载】GDB反向调试(Reverse Debugging)

    记得刚开始学C语言的时候,用vc的F10来调试程序,经常就是一阵狂按,然后一不小心按过了.结果又得从头再来,那时候我就问我的老师,能不能倒退回去几步.我的老师很遗憾地和我说,不行,开弓没有回头箭.这句 ...

  5. Linux C 程序 文件操作(Linux系统编程)(14)

    文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...

  6. 使用rapid-framework自动生成struct2

    在JavaWeb的开发中,对数据对象的操作不外乎增删改查,不同的数据对象,其action.service.model.jsp等都比较类似,如果手动去写这些代码,工作量大且非常繁琐.一个心高气傲的程序员 ...

  7. Java抓取网页数据

    http://ayang1588.github.io/blog/2013/04/08/catchdata/ 最近处于离职状态,正赶清闲,开始着手自己的毕业设计,课题定的是JavaWeb购物平台,打算用 ...

  8. FileStream使用小记

    流用于对IO处理 在System.IO名称空间中有以下类 BinaryReader/Writer TextReader/Writer Stream 其中类Stream为抽象类.由此有三个派生类: Me ...

  9. [旧博客]Python 第一天总结

    语法部分: 3**4 表示3的四次方 -1**3 结果是-1 raw_input 输入文本 input 输入值,input 3*3 结果为9 pow(5,5) 等于 5*5 abs(-1.8) 等于 ...

  10. hdu 5343 MZL's Circle Zhou SAM

    MZL's Circle Zhou 题意:给定两个长度不超过a,b(1 <= |a|,|b| <= 90000),x为a的连续子串,b为y的连续子串(x和y均可以是空串):问x+y形成的不 ...