使用java操作数据库时需要用到jdbc。
1、加载驱动 class forName("oracle.jdbc.driver.OracleDriver");
2、定义连接字符创
String url = "jdbc:oracle:thin:@192.168.50.128:1521:ORCL";
3、连接到数据库
Connection conn = DriverManager.getConnection(url, user,psw);
4、取得数据库sql语句的编译和执行对象
Statement stm = conn.createStatement();
5、定义要执行的sql语句
String readAll = "select empno,ename,sal,comm from emp";
6、执行sql语句
查询,可以获得结果集
ResultSet rs = stm.executeQuery(readAll);
更新
String sql2 = "update emp set comm = 700 where ename = 'SMITH'";
stm.executeUpdate(sql2);
注意事项:
如果不知道表结构,可以先进行查询(select * from emp);
for (int i = 0; i < rsd.getColumnCount(); i++) {
System.out.println(rsd.getColumnName(i + 1));
System.out.println(rsd.getColumnType(i + 1));
}
查询完之后可以遍历打印查看结果:
while (rs.next()) {
// 每次取得一行,用第一列进行标记
// System.out.println(rs.getInt("empno"));
// System.out.println(rs.getInt(1));
int empno = rs.getInt(1);
String ename = rs.getString(2);
float sal = rs.getFloat(3);
float comm = rs.getFloat(4);
System.out.println(empno + "\t" + ename + "\t" + sal + "\t"
+ comm);
}
java中的每一句操作都会自动提交,如果希望暂时不保存,可以使用
conn.setAutoCommit(false);
需要的时候再手动提交。
conn.commit();
sqlconnection.xml
<?xml version="1.0" encoding="utf-8"?>
<sqlconnection>
<sql id="oracle">
<url><![CDATA[jdbc:oracle:thin:@127.0.0.1:1521:ORCL]]></url>
<driver><![CDATA[oracle.jdbc.driver.OracleDriver]]></driver>
<user>test</user>
<pwd>huangbin</pwd>
</sql>
</sqlconnection>
SqlConnection.java
package com.hb.jdbc;
/**
* 配置的对象
*
* @author HuangBin
* @2014年10月8日
*/
public class SqlConnection {
String id;
String url;
String driver;
String user;
String psw;
public String toString() {
return user + " " + psw;
}
}
Test.java
package com.hb.jdbc;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 从xml文件中读到数据库的配置,并连接数据库更新部分数据
*
* @author HuangBin
* @2014年10月8日
*/
public class Test {
SqlConnection sc;
public static void main(String[] args) {
Test test = new Test();
test.parse();
test.connect();
}
public void connect() {
try {
Class.forName(sc.driver);
// 配置通过xml得到
Connection conn = DriverManager.getConnection(sc.url, sc.user,
sc.psw);
// 取得数据库sql语句的编译和执行对象
Statement stm = conn.createStatement();
// 定义要执行的sql语句
String sql = "select * from stu";
// 表名通过它得到
ResultSet rs = stm.executeQuery(sql);
// 再遍历rs
while (rs.next()) {
// 每次取得一行,用第一列进行标记
int stuno = rs.getInt(1);
String stuname = rs.getString(2);
int stuage = rs.getInt(3);
System.out.println(stuno + "\t" + stuname + "\t" + stuage);
}
conn.setAutoCommit(false);
// 在这里面执行sql语句
// 例如,需要从smith工资转100给allen,需要等两次更新都完成才提交事物,否则,可能执行完第一句,第二句来不及执行,
// 那么需要设置禁止自动提交,(那么就会自动回滚,不会更新数据库中的数据)。
conn.setAutoCommit(false);
String sql2 = "update stu set stuname = 'lisi' where stuname = 'zhangsan'";
stm.executeUpdate(sql2);
// 在这里模拟程序出错,如果出错,则上面那条不能生效
// int test = Integer.parseInt("aaaa");
String sql3 = "update stu set stuage = 20 where stuname = 'zhangsan'";
stm.executeUpdate(sql3);
// 手动提交
conn.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
public void parse() {
try {
// 创建一个解析器工厂对象
SAXParserFactory factory = SAXParserFactory.newInstance();
// 创建sax解析器
SAXParser sax = factory.newSAXParser();
MyHander hander = new MyHander();
sax.parse(new FileInputStream(new File("sqlconnection.xml")),
hander);
} catch (Exception e) {
e.printStackTrace();
}
}
class MyHander extends DefaultHandler {
String strValue;
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
System.out.println(sc);
}
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// System.out.println("解析到一个元素:" + qName);
if (qName.equals("sql")) {
sc = new SqlConnection();
sc.id = atts.getValue("id");
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
// System.out.println("元素结尾:" + qName);
if (qName.equals("url")) {
sc.url = strValue;
} else if (qName.equals("driver")) {
sc.driver = strValue;
} else if (qName.equals("user")) {
sc.user = strValue;
} else if (qName.equals("pwd")) {
sc.psw = strValue;
}
}
public void characters(char[] ch, int start, int length)
throws SAXException {
strValue = new String(ch, start, length);
// System.out.println(new String(ch, start, length));
}
}
}