读书人

完整java开发中JDBC联接Mysql数据库代

发布时间: 2013-08-01 15:23:18 作者: rapoo

完整java开发中JDBC连接Mysql数据库代码和步骤

  1. JDBC连接数据库 ??
  2. ?创建一个以JDBC连接数据库的程序,包含7个步骤: ??
  3. ?1、加载JDBC驱动程序: ??
  4. ????在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), ??
  5. ????这通过java.lang.Class类的静态方法forName(String??className)实现。 ??
  6. ????例如: ??
  7. ????try{ ??
  8. ????//加载MySql的驱动类???
  9. ????Class.forName("com.mysql.jdbc.Driver")?; ??
  10. ????}catch(ClassNotFoundException?e){ ??
  11. ????System.out.println("找不到驱动程序类?,加载驱动失败!"); ??
  12. ????e.printStackTrace()?; ??
  13. ????} ??
  14. ???成功加载后,会将Driver类的实例注册到DriverManager类中。 ??
  15. ?2、提供JDBC连接的URL ??
  16. ????连接URL定义了连接数据库时的协议、子协议、数据源标识。 ??
  17. ?????书写形式:协议:子协议:数据源标识 ??
  18. ????协议:在JDBC中总是以jdbc开始 ??
  19. ????子协议:是桥连接的驱动程序或是数据库管理系统名称。 ??
  20. ????数据源标识:标记找到数据库来源的地址与连接端口。 ??
  21. ? ??标准语法:

    ? ? <protocol(主要通讯协议)>:<subprotocol(次要通讯协议,即驱动程序名称)>:<data source ? identifier(数据源)>

    ? ? MySQL的JDBC?URL格式:

    ? ? jdbc:mysql//[hostname][:port]/[dbname][?param1=value1][&param2=value2]….

  22. ?
  23. ? ? 例如:(MySql的连接URL) ??
  24. ????jdbc:mysql: ??
  25. ????????//localhost:3306/test?useUnicode=true&characterEncoding=gbk?;???
  26. ???useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为 ??
  27. ???gb2312或GBK,本参数必须设置为true?。characterEncoding=gbk:字符编码方式。
  28. ? ??常见参数:

    ? ? user???????????????????????用户名

    ? ? password??????????????????密码

    ? ? autoReconnect??????????????????联机失败,是否重新联机(true/false)

    ? ? maxReconnect??????????????尝试重新联机次数

    ? ?initialTimeout???????????????尝试重新联机间隔

    ? ? maxRows???????????????????传回最大行数

    ? ? useUnicode?????????????????是否使用Unicode字体编码(true/false)

    ? ? characterEncoding??????????何种编码(GB2312/UTF-8/…)

    ? ? relaxAutocommit????????????是否自动提交(true/false)

    ? ?capitalizeTypeNames????????数据定义的名称以大写表示

  29. ?3、创建数据库的连接 ??
  30. ?????要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象, ??
  31. ?????该对象就代表一个数据库的连接。 ??
  32. ?????使用DriverManager的getConnectin(String?url?,?String?username?,? ??
  33. ????String?password?)方法传入指定的欲连接的数据库的路径、数据库的用户名和 ??
  34. ?????密码来获得。 ??
  35. ?????例如: ??
  36. ?????//连接MySql数据库,用户名和密码都是root???
  37. ?????String?url?=?"jdbc:mysql://localhost:3306/test"?;? ??
  38. ?????String?username?=?"root"?; ??
  39. ?????String?password?=?"root"?; ??
  40. ?????try{ ??
  41. ????Connection?con?=? ??
  42. ?????????????DriverManager.getConnection(url?,?username?,?password?)?; ??
  43. ?????}catch(SQLException?se){ ??
  44. ????System.out.println("数据库连接失败!"); ??
  45. ????se.printStackTrace()?; ??
  46. ?????} ??
  47. ?4、创建一个Statement ??
  48. ?????要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3??
  49. ?????种类型: ??
  50. ??????1、执行静态SQL语句。通常通过Statement实例实现。 ??
  51. ??????2、执行动态SQL语句。通常通过PreparedStatement实例实现。 ??
  52. ??????3、执行数据库存储过程。通常通过CallableStatement实例实现。 ??
  53. ????具体的实现方式: ??
  54. ????????Statement?stmt?=?con.createStatement()?; ??
  55. ???????PreparedStatement?pstmt?=?con.prepareStatement(sql)?; ??
  56. ???????CallableStatement?cstmt?=? ??
  57. ????????????????????????????con.prepareCall("{CALL?demoSp(??,??)}")?; ??
  58. ?5、执行SQL语句 ??
  59. ????Statement接口提供了三种执行SQL语句的方法:executeQuery?、executeUpdate ??
  60. ???和execute ??
  61. ????1、ResultSet?executeQuery(String?sqlString):执行查询数据库的SQL语句 ??
  62. ????????,返回一个结果集(ResultSet)对象。 ??
  63. ?????2、int?executeUpdate(String?sqlString):用于执行INSERT、UPDATE或 ??
  64. ????????DELETE语句以及SQL?DDL语句,如:CREATE?TABLE和DROP?TABLE等 ??
  65. ?????3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的 ??
  66. ????????语句。 ??
  67. ???具体实现的代码: ??
  68. ??????????ResultSet?rs?=?stmt.executeQuery("SELECT?*?FROM?...")?; ??
  69. ????int?rows?=?stmt.executeUpdate("INSERT?INTO?...")?; ??
  70. ????boolean?flag?=?stmt.execute(String?sql)?; ??
  71. ?6、处理结果 ??
  72. ????两种情况: ??
  73. ?????1、执行更新返回的是本次操作影响到的记录数。 ??
  74. ?????2、执行查询返回的结果是一个ResultSet对象。 ??
  75. ??????ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些 ??
  76. ??????行中数据的访问。 ??
  77. ??????使用结果集(ResultSet)对象的访问方法获取数据: ??
  78. ?????while(rs.next()){ ??
  79. ?????????String?name?=?rs.getString("name")?; ??
  80. ????String?pass?=?rs.getString(1)?;?//?此方法比较高效???
  81. ?????} ??
  82. ????(列是从左到右编号的,并且从列1开始) ??
  83. ?7、关闭JDBC对象? ??
  84. ?????操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声 ??
  85. ?????明顺序相反: ??
  86. ?????1、关闭记录集 ??
  87. ?????2、关闭声明 ??
  88. ?????3、关闭连接对象 ??
  89. ??????????if(rs?!=?null){???//?关闭记录集???
  90. ????????try{ ??
  91. ????????????rs.close()?; ??
  92. ????????}catch(SQLException?e){ ??
  93. ????????????e.printStackTrace()?; ??
  94. ????????} ??
  95. ??????????} ??
  96. ??????????if(stmt?!=?null){???//?关闭声明???
  97. ????????try{ ??
  98. ????????????stmt.close()?; ??
  99. ????????}catch(SQLException?e){ ??
  100. ????????????e.printStackTrace()?; ??
  101. ????????} ??
  102. ??????????} ??
  103. ??????????if(conn?!=?null){??//?关闭连接对象???
  104. ?????????try{ ??
  105. ????????????conn.close()?; ??
  106. ?????????}catch(SQLException?e){ ??
  107. ????????????e.printStackTrace()?; ??
  108. ?????????} ??
  109. ??????????}??

?

读书人网 >其他数据库

热点推荐