数据库 —— 使用JDBC操作数据库
[Link] http://www.developer.com/java/data/manipulating-a-database-with-jdbc.html
Manipulating a Database with JDBC
- March 26, 2014
- By Manoj Debnath
- Bio »
- Send Email »
- More Articles »
Java programs communicate with the database and manipulate its data with the help of the JDBC API. The JDBC driver enables the Java application to connect to a database. JDBC is almost always used with relational databases, also it can be used with any other table based data source. We do not have to worry about the availability of a driver, as major RDBMS (Relational Database Management System) providers provide them free. Apart from that there are many third-party JDBC drivers available.
Basic Requirements
Since we shall be going hands on down the line, the basic software requirements for JDBC programming are as follows.
1.Java SDK

2.RDBMS Package (For example, MySQL, Oracle, PostgreSQL, etc.)
3.IDE (For example, Eclipse, NetBeans, JDeveloper, etc.)
4.JDBC driver (JDBC drivers are database specific, especially, if we use a driver other than Type1:JDBC-ODBC Bridge. For example, MySQL Connector/Jis the official JDBC driver for MySQL, ojdbc for Oracle and so on...PostgreSQL JDBC Driver)
Installation is pretty straightforward; if in doubt, refer to the appropriate installation instruction of the relevant packages during installation.
JDBC Programming Steps
Every Java code in JDBC Programming goes through the following six steps in one way or the other. These steps give an idea about what order to follow during coding and a basic insight into their significance.
Related Articles
1. Importing java.sql Package
Almost all the classes and interfaces used in JDBC programming are compiled in the java.sql package. As a result it is our primary requirement to import the package as follows.
import java.sql.*;
2. Load and Register JDBC Driver
The most common and easiest way to load the driver is by using the Class.forName() method.
Class.forName("com.mysql.jdbc.Driver");
This method takes the complete package name of the driver as its argument. Once the driver is loaded, it will call the DriverManager.registerDriver() method to register itself. Registering a driver implies that the currently registered driver is added to a list of available Driver objects maintained by the DriverManager. The driver manager serves the request from the application using one of the lists of available Driver objects.
3. Establishing Connection
The standard method to establish a connection to a database is through the method callDriverManager.getConnection(). The arguments accepted by this method are: a string representation of the database URL, the user name to log in to the database and the password.
DriverManager.getConnection("jdbc:mysql://localhost/hr","user1","pass");
4. Creating a Statement
We need to create a Statement object to execute a static SQL query. Static SQL statements can be updates, inserts, queries and even DDL SQL statements. Statement objects are created with the help of the Connection object's createStatement() method as follows:
Statement statement = connection.createStatement();
5. Execute SQL Statement and Retrieve Result
We can use the executeQuery() method of the Statement object to fire the query to the database. This method takes an SQL query string as an argument and returns the result as a ResultSetobject. The ResultSet object contains both the data returned by the query and methods for retrieving the data.
ResultSet resultSet=statement.executeQuery("SELECT
* FROM employees");
The get methods of the ResultSet object can be used to retrieve each of the fields in the record fetched from the database into java variables.
while(resultSet.next()){
System.out.println(resultSet.getString(“emp_id”));
System.out.println(resultSet.getString(“first_name”));
System.out.println(resultSet.getString(“last_name”));
...
}
6. Close Connection
It is highly recommended that an application should close the Connection object and Statementobjects explicitly, because, earlier opened connections can cause trouble for the database and open connections are also prone to security threats. Simply add following statements:
statement.close();
connection.close();
Putting it Together
Let us create an application to demonstrate the CRUD operation to manipulate the database records. CRUD stands for Create, Read, Update and Delete. We shall fetch the database record with a Readoperation, create a new record and save it into the database with a Create operation, modify the existing record with an Update operation and remove a record from the database with a Deleteoperation. Observe that the code below is self-explanatory and almost repetitive with a few significant lines actually invoking the change in the operation. To get a deeper grasp on the Java SQL library functions, refer to the Java API documentation.
//import statements...
public class Main {
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost/hr";
private static final String USERNAME = "admin";
private static final String PASSWORD = "secret";
/* This operation creates the table in the database which otherwise have to be created through SQL DDL.
This operation is given for convenience and does not belong to the CRUD operation we are talking of.
Nonetheless novice programmer may find it useful as of how to create a table through Java code...*/
public static void createTable(){
Connection connection = null;
Statement statement = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USERNAME,
PASSWORD);
statement = connection.createStatement();
//boolean b=statement.execute("DROP TABLE IF EXISTS emp");
boolean b=statement.execute("CREATE TABLE
emp(id int primary key,name varchar(15),department int,salary int,location varchar(20))");
if(b==true)
System.out.println("Tables created...");
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException clsNotFoundEx) {
clsNotFoundEx.printStackTrace();
System.exit(1);
} finally {
try {
statement.close();
connection.close();
} catch (Exception e) {
System.exit(1);
}
}
}
public static void createEmployee(int id, String name, int dept, int sal, String loc){
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USERNAME,PASSWORD);
preparedStatement = connection.prepareStatement("INSERT INTO emp VALUES(?,?,?,?,?)");
preparedStatement.setInt(1, id);
preparedStatement.setString(2, name);
preparedStatement.setInt(3, dept);
preparedStatement.setInt(4, sal);
preparedStatement.setString(5, loc);
boolean b=preparedStatement.execute();
if(b==true)
System.out.println("1 record inserted...");
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException clsNotFoundEx) {
clsNotFoundEx.printStackTrace();
System.exit(1);
} finally {
try {
preparedStatement.close();
connection.close();
} catch (Exception e) {
System.exit(1);
}
}
}
public static void updateSalary(int id, int raise){
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USERNAME,PASSWORD);
preparedStatement = connection.prepareStatement("UPDATE emp SET salary=salary+? WHERE id=?");
preparedStatement.setInt(1, raise);
preparedStatement.setInt(2, id);
boolean b=preparedStatement.execute();
if(b==true)
System.out.println("$"+raise+" raised for emp id="+id);
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException clsNotFoundEx) {
clsNotFoundEx.printStackTrace();
System.exit(1);
} finally {
try {
preparedStatement.close();
connection.close();
} catch (Exception e) {
System.exit(1);
}
}
}
public static void deleteEmployee(int id){
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USERNAME,PASSWORD);
preparedStatement = connection.prepareStatement("DELETE FROM emp WHERE id=?");
preparedStatement.setInt(1, id);
boolean b=preparedStatement.execute();
if(b==true)
System.out.println("1 record deleted...");
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException clsNotFoundEx) {
clsNotFoundEx.printStackTrace();
System.exit(1);
} finally {
try {
preparedStatement.close();
connection.close();
} catch (Exception e) {
System.exit(1);
}
}
}
public static void readEmployees() {
Connection connection = null;
Statement statement = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USERNAME,
PASSWORD);
statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM emp");
ResultSetMetaData metaData = resultSet.getMetaData();
int noCols = metaData.getColumnCount();
for (int i = 1; i <= noCols; i++) {
if (i != 3)
System.out.printf("%-10s\t", metaData.getColumnName(i).toUpperCase());
}
System.out.println();
while (resultSet.next()) {
for (int i = 1; i <= noCols; i++) {
if (i != 3)
System.out.printf("%-10s\t", resultSet.getObject(i));
}
System.out.println();
}
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException clsNotFoundEx) {
clsNotFoundEx.printStackTrace();
System.exit(1);
} finally {
try {
statement.close();
connection.close();
} catch (Exception e) {
System.exit(1);
}
}
}
public static void readEmployee(int id) {
Connection connection = null;
Statement statement = null;
try {
Class.forName(JDBC_DRIVER);
connection = DriverManager.getConnection(DATABASE_URL, USERNAME,
PASSWORD);
statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM emp WHERE id="+id);
ResultSetMetaData metaData = resultSet.getMetaData();
int noCols = metaData.getColumnCount();
for (int i = 1; i <= noCols; i++) {
if (i != 3)
System.out.printf("%-10s\t", metaData.getColumnName(i).toUpperCase());
}
System.out.println();
while (resultSet.next()) {
for (int i = 1; i <= noCols; i++) {
if (i != 3)
System.out.printf("%-10s\t", resultSet.getObject(i));
}
System.out.println();
}
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException clsNotFoundEx) {
clsNotFoundEx.printStackTrace();
System.exit(1);
} finally {
try {
statement.close();
connection.close();
} catch (Exception e) {
System.exit(1);
}
}
}
public static void main(String[] args) {
//createTable();
createEmployee(1234, "Larson", 123, 1200, "New Jersey");
createEmployee(5678, "Jones", 123, 1100, "New Jersey");
createEmployee(7890, "Kapil", 345, 1600, "Los Angeles");
createEmployee(2341, "Myers", 123, 1800, "New Jersey");
createEmployee(6784, "Bruce", 345, 2200, "Los Angeles");
createEmployee(9636, "Neumann", 123, 3200, "New Jersey");
updateSalary(1234, 1000);
createEmployee(1111, "Lee", 123, 4400, "New Jersey");
deleteEmployee(1111);
readEmployees();
readEmployee(6784);
}
}
Conclusion
Once one gets an idea of the CRUD operations of JDBC programming and how to write them, it’s just a matter of practice to master the intricacies of database manipulation. The above example is very minimalistic and a lot of checking/cross checking during data manipulation has been overlooked to keep it simple. For example the code can have a search method, which would actually use the same CRUD techniques, a checking should be there to verify the existence of a record before updating a record etc. However, if one grasps the CRUD techniques described above in Java code, the rest is just a walk in the park.
数据库 —— 使用JDBC操作数据库的更多相关文章
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- JDBC操作数据库的学习(2)
在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- Spark Streaming通过JDBC操作数据库
本文记录了学习使用Spark Streaming通过JDBC操作数据库的过程,源数据从Kafka中读取. Kafka从0.10版本提供了一种新的消费者API,和0.8不同,因此Spark Stream ...
- jdbc操作数据库(详细)
JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言.利用JDBC可以将JAVA代码连接到oracle.DB2.SQL ...
- JDBC操作数据库的基本步骤:
JDBC操作数据库的基本步骤: 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- Spring入门(十五):使用Spring JDBC操作数据库
在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...
随机推荐
- jvm-初探
目录 1,Java体系结构 2.jvm执行引擎 3,ClassLoader的体系结构 4,java class文件 概述 其实,学java不算新手了,但是却感觉很多基本的知识,我们一开始也许是记住而不 ...
- jquery 的缺点
接口不统一 其中.each();.map();$.each();这些方法的参数函数的参数顺序是index, value这种顺序.但是$.map();方法的参数函数的参数顺序则是value,index这 ...
- $(document).ready(function(){}),$().ready(function(){})和$(function(){})三个有区别么
三者都是一样的,最完整的写法是:$(document).ready(function(){})ready() 函数仅能用于当前文档,因此无需选择器.所以document选择器可以不要,那么就可以写成: ...
- Swift - 03 - 整数类型
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- cocos2d-x 实现粒子飞行特效
效果图 说明 实现效果: 按下鼠标并且移动, 所到之处产生光圈 光圈会以窗口中心为终点, 并且会偏移自身角度对准终点, 然后持续飞行, 直到终点. 附件 下载源码, 请猛击这里!
- 在VC6中使用ogre进行游戏开发
微软公司开发的visual c++6.0堪称史上最易用.最成熟的开发工具.vc6以其小巧.轻便赢得了程序员的喜爱,以至于在VS大行其道的时代,很多程序员仍然使用vc6作为开发工具,vc6的欢迎性可见一 ...
- 【转载】Think as Customer 以客户为中心的测试理念
纵观各大公司的核心理念,往往都有一条类似“以客户为中心”的价值观.华为公司更是把“以客户为中心”放在其核心价值观的第一条,以显示它的重要性.从我 们入职培训开始,公司就反复强调并引导大家深入讨论,希望 ...
- Python标准库--os模块
这个模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行.一个例 ...
- underscorejs-map学习
2.2 map 2.2.1 语法: _.map(list, iteratee, [context]) 2.2.2 说明: 对集合的每个成员依次进行某种操作,将返回的值依次存入一个新的数组.接收3个参数 ...
- underscorejs-filter学习
2.6 filter 2.6.1 语法: _.filter(list, predicate, [context]) 2.6.2 说明: 对list集合的每个成员依次进行匹配(根据predicate迭代 ...