加载jdbc的驱动类Class.forName("com.mysql.jdbc.Driver")到jvm中。
使用DriverManager.getConnection(sql_url,username,pwd)方法返回一个Connection对象。
通过Connection.prepareStatement(sql)方法,将sql语句进行预编译,返回一个PrepareStatement对象,该PrepareStatement对象能将参数化的 SQL 语句发送到数据库。
执行preparedStatement.executeQuery(sql);方法返回一个ResultSet类的对象,ResultSet类的对象中的内容是数据库中“查询到”的内容;(除了查询方法之外,也可以有增删改查)
获取数据库中的数据并任意操作:
通过ResultSet的next()方法,逐行读取数据库中的信息;可以将读取到的信息赋值给其他变量等供它用;
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.PreparedStatement;
4. import java.sql.ResultSet;
5. import java.sql.SQLException;
6.
7. /**
8. * @author Administrator
9. *链接数据库,在这个java类中使用的是JDBC技术链接的数据库,
10. *这技术需要一类三接口
11. *DriverManager类,
12. *Connection接口,java.sql.Connection
13. *Statement接口,java.sql.Statement;
14. *ResultSet接口,java.sql.ResultSet;
15. */
16.public class GetSQLData {
17. public static void main(String[] args) {
18. //创建三个接口的对象
19. Connection connection = null;
20. PreparedStatement preparedStatement = null;
21. ResultSet resultSet = null;
22. //获取驱动类
23. try {
24. Class.forName("com.mysql.jdbc.Driver");//要确保已经导入了'mysql-connector-java-5.1.29.jar'(最后的版本号可以随意)
25. //com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); 番外小知识:该句与上一句的功能是一样,都是将Driver类加载到
26. //jvm中,并且该Driver类是经过初始化了的;(一个初始化了的Driver类被加载到jvm中,则就是该Driver完成了在jvm中的“注册”);如果仅仅是
27. //语句com.mysql.jdbc.Driver driver = null; 就不行,因为虽然加载了,但是没有初始化;
28. } catch (ClassNotFoundException e) {
29. System.out.println("获取驱动类失败");
30. e.printStackTrace();
31. }
32.
33. //连接数据库:使用java.sql.DriverManager的getConnection方法以数据库url加上数据库的username和password做参数;
34. try {
35. connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/news","root","yujiawen");
36. } catch (SQLException e) {
37. System.out.println("连接数据库失败");
38. e.printStackTrace();
39. }
40.
41. String sql = "select * from title";
42. try {
43. preparedStatement = connection.prepareStatement(sql);
44. } catch (SQLException e) {
45. // TODO Auto-generated catch block
46. e.printStackTrace();
47. }
48.
49. try {
50. resultSet = preparedStatement.executeQuery(sql);
51. } catch (SQLException e) {
52. // TODO Auto-generated catch block
53. e.printStackTrace();
54. }
55.
56. try {
57. while(resultSet.next())//ResultSet 对象具有指向其当前数据行的光标。
58. //最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,
59. //所以可以在 while 循环中使用它来迭代结果集。
60. {
61. int id = resultSet.getInt("id");
62. String name = resultSet.getString("name");
63. String creator = resultSet.getString("creator");
64. System.out.println("id:"+id+" name:"+name+" creator:"+creator);
65. }
66. } catch (SQLException e) {
67. // TODO Auto-generated catch block
68. e.printStackTrace();
69. }
70.
71.
72. //关闭三个接口的对象
73. if(resultSet!=null)
74. {
75. try {
76. resultSet.close();
77. } catch (SQLException e) {
78. // TODO Auto-generated catch block
79. e.printStackTrace();
80. }
81. }
82. if(preparedStatement!=null)
83. {
84. try {
85. preparedStatement.close();
86. } catch (SQLException e) {
87. // TODO Auto-generated catch block
88. e.printStackTrace();
89. }
90. }
91. if(connection!=null)
92. {
93. try {
94. connection.close();
95. } catch (SQLException e) {
96. // TODO Auto-generated catch block
97. e.printStackTrace();
98. }
99. }
100. }
101. }
运行结果: