使用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)); } } }