- 浏览: 122765 次
- 性别:
- 来自: 佛山
文章分类
最新评论
-
zgw06629:
多谢提供的安装包
MyEclipse安装资源文件支持中文插件编辑属性 -
lmzpp:
学习了,谢谢
MyEclipse安装资源文件支持中文插件编辑属性 -
nba:
不错, 谢谢了
MyEclipse安装资源文件支持中文插件编辑属性 -
CMShmily:
MyEclipse安装资源文件支持中文插件编辑属性
数据库技术
实例293 加载JDBC驱动程序
import java.sql.DriverManager; import java.util.Enumeration; public class UseMySQLDriver { public static void main(String[] args) { try { // 初始化并加载MySQL驱动程序 Class.forName("com.mysql.jdbc.Driver"); Enumeration em = DriverManager.getDrivers(); // 显示驱动程序信息 while (em.hasMoreElements()) { System.out.println(em.nextElement()); } // 处理加载数据库中可能出现的异常 } catch (Exception e) { System.out.println("加载数据库驱动程序出现异常"); } } }
实例294 通过JDBC对数据库进行查询
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class JDBCSearch { static ResultSet rs = null; public static void main(String[] args) throws SQLException { try { Class.forName("com.mysql.jdbc.Driver");// 加载驱动程序 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root");// 建立链接 Statement usest = con.createStatement();// 创建Statement对象 usest.setMaxRows(100);// 设置选项 ResultSet users = usest.executeQuery("select * from gods");// 执行查询 System.out.println("ResultSet MaxRows:" + usest.getMaxRows()); System.out.println("Query Time Out:" + usest.getMaxRows() + "\n"); String sqlstr = "select * from gods where price>?";// 执行参数查询 PreparedStatement ps = con.prepareStatement(sqlstr);// 创建PreparedStatement对象 ps.setString(1, "15"); rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData();// 获取结果集中的列名及其类型 int cc = rsmd.getColumnCount(); System.out.println("ColumnName\t\tColumnType"); for (int i = 1; i <= cc; i++) { System.out.println(rsmd.getColumnClassName(i) + "\t" + rsmd.getColumnTypeName(i)); } con.close();// 关闭对象 } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
实例295 数据库更新
import java.io.UnsupportedEncodingException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUpdate { public static void main(String[] args) throws SQLException, UnsupportedEncodingException { String name, type, size, strn; String depict, price, offers; try { Class.forName("com.mysql.jdbc.Driver");// 加载驱动程序 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root");// 建立链接 Statement st = con.createStatement();// 创建Statement对象 strn = "alter table gods add column size varchar(12)";// 向表中添加列 st.executeUpdate(strn); strn = "INSERT INTO gods(name, type, depict,price, offers,sizes) VALUES ('Shiseido', 'Cosmetics','meibaibs','280','SOFINA','250ml');"; st.executeUpdate(strn); strn = "INSERT INTO gods(name, type, depict,price, offers) VALUES ('Lamp','luminaire','Cartoon images','28','no');"; st.executeUpdate(strn); ResultSet rs = st.executeQuery("select * from gods");// 执行查询 System.out.println("商品名称\t商品类别\t商品描述\t商品价格\t优惠商品尺码"); while (rs.next()) { name = new String(rs.getString("name").getBytes("iso8859-1"), "gb2312"); price = new String(rs.getString("price").getBytes("iso8859-1"), "gb2312"); depict = new String(rs.getString("depict") .getBytes("iso8859-1"), "gb2312"); type = new String(rs.getString("type").getBytes("iso8859-1"), "gb2312"); size = rs.getString("size"); offers = new String(rs.getString("offers") .getBytes("iso8859-1"), "gb2312"); System.out.println(name + " " + type + " " + depict + " " + price + " " + offers + " " + size); } con.close();// 关闭连接 } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
实例296 获取数据库的基本信息
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class JDBCTable { public static void main(String[] args) throws SQLException { String ul, namestr, typestr, cstr, strn = null, indexstr, prostr = null; short data; int index, pron; String[] type = { "table" }; ul = "jdbc:odbc:useDSN"; try { Class.forName("com.mysql.jdbc.Driver");// 加载驱动程序 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root");// 建立链接 DatabaseMetaData dbmd = con.getMetaData();// 使用DatabaseMetaData对象获取数据源相关信息 ResultSet rs = dbmd.getTables(null, null, null, type);// 获取表中信息的结果集 while (rs.next()) {// 输出表的信息 namestr = rs.getString("TABLE_NAME");// 创建表名 typestr = rs.getString("TABLE_TYPE");// 获取表的类型 System.out.println("输出数据源中所有表的信息");// 输出结果集 strn = "数据库表名:" + namestr + "" + "表的类型:" + typestr; System.out.println(strn); } rs = dbmd.getColumns(null, null, "gods", "%");// 获取表中列的信息 while (rs.next()) { namestr = rs.getString("TABLE_NAME");// 获取表名 cstr = rs.getString("COLUMN_NAME");// 获取列名 typestr = rs.getString("TYPE_NAME");// 获取列类型 data = rs.getShort("DATA_TYPE");// 获取列的SQL类型 System.out.println("输出数据库中列的信息");// 输出列信息 strn = "表名:" + namestr + "" + "列名:" + cstr + "" + "列类型:" + "" + "列SQL类型:" + data; System.out.println(strn); } rs = dbmd.getIndexInfo(null, null, "stugodsdent", false, false);// 获取索引信息 while (rs.next()) { namestr = rs.getString("INDEX_NAME");// 获取索引名 index = rs.getInt("TYPE");// 获取索引类型 switch (index) { case 0: { indexstr = "没有索引"; break; } case 1: { indexstr = "聚集索引"; break; } case 2: { indexstr = "哈希表索引"; break; } case 3: { indexstr = "其它索引"; break; } } strn = "索引名:" + namestr + "" + "索引类型" + index; System.out.println(strn); } rs = dbmd.getProcedures(null, null, "%");// 获取存储过程信息 System.out.println("存储过程信息"); while (rs.next()) { namestr = rs.getString("PROCEDURE_NAME");// 获取存储过程名称 pron = rs.getInt("PROCEDURE_TYPE"); switch (pron) { case 0: { prostr = "返回结果未知"; break; } case 1: { prostr = "没有返回结果"; break; } case 2: { prostr = "有返回结果"; break; } } strn = "存储过程名称:" + namestr + "" + "存储过程类型:" + prostr; System.out.println(strn); } rs = dbmd.getProcedureColumns(null, null, "%", "%");// 获取存储过程列信息 System.out.println("存储过程列信息");// 输出存储过程列信息 while (rs.next()) { namestr = rs.getString("PROCEDURE_NAME");// 获取存储过程名称 prostr = rs.getString("COLUMN_NAME");// 获取存储过程类型 strn = "存储过程:" + namestr + "" + "存储过程列名:" + prostr; System.out.println(strn); } con.close();// 关闭链接 } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
实例297 获取数据库对SQL支持的信息
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; public class GetDataBaseMessage { public static void main(String[] args) { try { String ul, strn; ul = ""; // 加载驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 建立连接 Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 获取数据源相关信息 DatabaseMetaData dbmd = con.getMetaData(); // 获取数据库支持的数学函数 strn = dbmd.getNumericFunctions(); System.out.println("数据库支持的数学函数:" + strn); // 获取数据库支持的字符串函数 strn = dbmd.getStringFunctions(); System.out.println("数据库支持的字符串函数:" + strn); // 获取数据库支持的系统函数 strn = dbmd.getSystemFunctions(); System.out.println("数据库支持的系统函数:" + strn); // 获取数据库支持的日期时间函数 strn = dbmd.getTimeDateFunctions(); System.out.println("数据库支持的日期时间函数:" + strn); boolean flag = dbmd.supportsMinimumSQLGrammar(); if (flag) { System.out.println("支持ODBC最小SQL语法"); } else { System.out.println("不支持ODBC最小SQL语法"); } flag = dbmd.supportsCoreSQLGrammar(); if (flag) { System.out.println("支持ODBC核心SQL语法"); } else { System.out.println("不支持ODBC核心SQL语法"); } flag = dbmd.supportsANSI92EntryLevelSQL(); if (flag) { System.out.println("支持ANSI92初级SQL语法"); } else { System.out.println("不支持ANSI92初级SQL语法"); } flag = dbmd.supportsANSI92IntermediateSQL(); if (flag) { System.out.println("支持ANSI92中级SQL语法"); } else { System.out.println("不支持ANSI92中级SQL语法"); } flag = dbmd.supportsANSI92FullSQL(); if (flag) { System.out.println("支持ANSI92全集SQL语法"); } else { System.out.println("不支持ANSI92全集SQL语法"); } } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } }
实例298 处理访问数据库出现的常见异常情况
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.SQLWarning; public class DataBaseException { public static void main(String[] args) { String ul = ""; try { Class.forName("com.mysql.jdbc.Drivers");// 加载驱动程序 } catch (Exception e) { System.out.println("加载驱动出错"); } try { Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306", "root", "root");// 建立链接 SQLWarning warn = con.getWarnings();// 创建SQLWarning对象 int num = 1; while (warn != null) { System.out.println("第" + num + "警告"); System.out.println("SQL state" + warn.getSQLState()); System.out.println("警告信息" + warn.getMessage()); System.out.println("警告代码" + warn.getErrorCode()); warn = warn.getNextWarning(); num++; } } catch (SQLException e) { while (e != null) { System.out.println("SQL state" + e.getSQLState()); System.out.println("错误消息" + e.getMessage()); System.out.println("错误代码" + e.getErrorCode()); e = e.getNextException(); } } } }
实例299 在Servlet中连接数据库
import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ConnectServletDataBase extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; String title = "Simple Servlet Connecting to MySQL DB"; response.setContentType("text/html;charset=GB2312"); out = response.getWriter(); out.println("<html><head><title>"); out.println(title); out.println("</title></head><body>"); out.println("<h1>" + title + "</h1>"); out.println("<p>this is output from SimpleServlet"); Driver d; Connection con; Statement stmt; ResultSet resulets; try { d = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();// 加载MySQL的JDBC驱动 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root");// 创建连接 stmt = con.createStatement();// 创建Statement对象 String sqlstr = "select * from gods";// 查询数据表gods的sql语句 resulets = stmt.executeQuery(sqlstr);// 查询数据表并将查出的结果集赋给ResultSet对象 displayResult(resulets, out);// 调用displayResult方法 stmt.close(); con.close(); } catch (Exception e) { out.println("error:" + e.toString()); } out.println("</body></html>"); out.close(); } public void displayResult(ResultSet result, PrintWriter out) { StringBuffer buf = new StringBuffer();// 创建一个StringBuffer对象 String temp; try { ResultSetMetaData rsmd = result.getMetaData();// 创建一个ResultSetMetaData对象 int numCols = rsmd.getColumnCount();// 获取结果集中的列数 int i, rowcount = 0; for (i = 1; i <= numCols; i++) {// 输出字段名 if (i > 1) buf.append(","); buf.append(rsmd.getColumnLabel(i)); } buf.append("<br>"); while (result.next() && rowcount < 100) {// 输出字段名中的数据 for (i = 1; i <= numCols; i++) { if (i > 1) buf.append(","); buf.append(result.getString(i)); } buf.append("<br>"); rowcount++; } out.println("<br>"); out.println(buf.toString()); result.close(); } catch (Exception e) { out.println("error:" + e.toString()); return; } } public static void main(String[] args) { // TODO Auto-generated method stub } }
实例300 数据分页显示
package page; import java.util.Vector; public class PageBean { private int curPage; // 当前第几页; private int maxPage; // 共有多少页; private int maxRowCount; // 总共多少行 private int rowsPerPage = 3; // 每页有多少行 ,默认为10行 private Vector vector = new Vector(); // 用来存放最后的查询结果 private String countSql = ""; // 统计总的查询结果数目的sql private String selectSql = ""; // 查询sql语句 private String formName = "item2"; // form表单的名字,默认为item public void setFormName(String formName) { this.formName = formName; } public String getFormName() { return this.formName; } public void setRowsPerPage(int rowsPerPage) { this.rowsPerPage = rowsPerPage; } public int getRowsPerPage() { return this.rowsPerPage; } public void setCurPage(int curPage) { this.curPage = curPage; } public int getCurPage() { return this.curPage; } // 设置查询总数的sql语句,当然不是必须的 public void setCountSql(String countSql) { this.countSql = countSql; } public String getCountSql() { return this.countSql; } public void setSelectSql(String selectSql) { this.selectSql = selectSql; } public String getSelectSql() { return this.selectSql; } // 返回查询结果的总记录数 public void setMaxRowCount() { this.maxRowCount = PageSQL.getInt(getCountSql()); } public int getMaxRowCount() { return this.maxRowCount; } // 根据总数计算总共有多少页 public void setMaxPage() { this.maxPage = (this.maxRowCount % this.rowsPerPage == 0) ? this.maxRowCount / this.rowsPerPage : this.maxRowCount / this.rowsPerPage + 1; } public int getMaxPage() { return this.maxPage; } // 返回查询的结果 // 修改这个方法,根据不同数据库的特点实现分页显示 public Vector getResult() { setMaxRowCount(); // 总结果数 setMaxPage(); // 总的页数 // select * from table limit n,m 查询出从n开始的m条记录 String objectSql = this.selectSql + " limit " + (getCurPage() - 1) * getRowsPerPage() + " , " + getRowsPerPage(); Vector vector = PageSQL.getQuery(objectSql); System.out.println(vector.size()); return vector; } // 修改这个方法可以改变分页的显示样式 public String getPage() { StringBuffer sbf = new StringBuffer(); // 首先输出页面中js实现的页面跳转 sbf.append("<script languange=\"javascript\">").append( "function Jumping(){").append( " document." + getFormName() + ".submit();").append(" return;") .append("}").append("function gotoPage(pagenum){").append( " document." + getFormName() + ".jumpPage.value=pagenum;").append( " document." + getFormName() + ".submit();").append( " return;").append("}").append("</script>"); // 在这个可以改变分页显示的样式 sbf.append("<center><table>").append("<tr>").append("<td>").append( "每页" + getRowsPerPage() + "行 ").append( "共" + getMaxRowCount() + "行 ").append( "第" + getCurPage() + "页 ") .append("共" + getMaxPage() + "页").append("<br>").append(""); if (getCurPage() == 1) { sbf.append(" 首页 上一页"); } else { sbf.append("<a href=\"javascript:gotoPage(1)\">首页</a>").append( " <a href=\"javascript:gotoPage(" + (getCurPage() - 1) + ")\">上一页</a>"); } if (getCurPage() == getMaxPage()) { sbf.append(" 下一页 尾页"); } else { sbf.append( "<a href = \"javascript:gotoPage(" + (getCurPage() + 1) + ")\">下一页</a>").append( " <a href = \"javascript:gotoPage(" + getMaxPage() + ")\">尾页</a>"); } sbf.append(" 转到第").append( "<select name=\"jumpPage\" onchange=\"Jumping()\">"); for (int i = 1; i <= getMaxPage(); i++) { if (i == getCurPage()) { sbf.append("<option selected value=\"" + i + "\">" + i + "</option>"); } else { sbf.append("<option value=\"" + i + "\">" + i + "</option>"); } } sbf.append("</select>页").append("</td>").append("</tr>").append( "</table></center>").append(""); return sbf.toString(); } }
package page; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class Zh_Filter implements Filter{ public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //将所有request内的对象设置字符集为gb2312 request.setCharacterEncoding("gb2312"); //将所有response内的对象设置字符集为gb2312 response.setCharacterEncoding("gb2312"); //用chain的doFilter处理过滤 chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="page.*"%> <jsp:directive.page import="page.PageBean;" /> <html> <head> <title>MySQL分页实例</title> </head> <% String countSql = "select count(*) from gods"; String jumpPage = (request.getParameter("jumpPage") == null) ? "1" : request.getParameter("jumpPage"); System.out.println(jumpPage + " jumpPage"); String objSql = "select * from gods"; PageBean pjb = new PageBean(); pjb.setRowsPerPage(3); //设置每页显示多少行记录 pjb.setCurPage(Integer.parseInt(jumpPage)); //设置要跳转到哪一页 pjb.setCountSql(countSql); //设置统计所有记录说的sql pjb.setSelectSql(objSql); //设置要查询的sql pjb.setFormName("item2"); //设置form表单的名字 java.util.Vector vector = pjb.getResult(); //将查询结果放在vector中 %> <body> <form name="item2" method="post" action="page.jsp"> <table border="1" width="70%" align="center"> <tr> <th> 序号 </th> <th> 商品名称 </th> <th> 商品类别 </th> <th> 商品描述 </th> <th> 商品价格 </th> <th> 商品尺码 </th> <th> 优惠 </th> </tr> <% int start = (Integer.parseInt(jumpPage) - 1) * pjb.getRowsPerPage() + 1; System.out.println(start + " start"); String name = ""; String type = ""; String depict = ""; String price = ""; String size = ""; String offers = ""; out .println("<FONT style='FONT-SIZE:28px;'><B>MySQL数据库实现的分页实例</B></FONT>"); // 传入一个查询sql语句然后将结果放入Vector中。以字段名为Key,并通过toUpperCase()将字段名全部转成大字所以像下面这样才能取道正确的值: // hash.get("FIELD"); for (int i = 0; i < vector.size() && i < 3; i++) { java.util.Hashtable hash = (java.util.Hashtable) vector .elementAt(i); name = (String) hash.get("NAME"); //通过字段名取数据 type = hash.get("TYPE").toString(); depict = (String) hash.get("DEPICT"); price = (String) hash.get("PRICE"); size = (String) hash.get("SIZE"); offers = (String) hash.get("OFFERS"); %> <tr> <td> <%=start + i%> </td> <td> <%=name%> </td> <td> <%=type%> </td> <td> <%=depict%> </td> <td> <%=price%> </td> <td> <%=size%> </td> <td> <%=offers%> </td> </tr> <% } %> </table> <%=pjb.getPage()%> </form> </body> </html>
实例301 批处理
package chp19; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Batch { // 判断数据库是否支持批处理 public static boolean support_Batch(Connection con) { try { // 得到数据库的元数据 DatabaseMetaData md = con.getMetaData(); return md.supportsBatchUpdates(); } catch (SQLException e) { e.printStackTrace(); } return false; } // 执行一批SQL语句 public static int[] startBatch(Connection con, String[] sqls) throws Exception { if (sqls == null) { return null; } Statement sm = null; try { sm = con.createStatement(); for (int i = 0; i < sqls.length; i++) { sm.addBatch(sqls[i]); // 将所有的SQL语句添加到Statement中 } // 一次执行多条SQL语句 return sm.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } finally { sm.close(); } return null; } public static void main(String[] args) throws Exception { System.out.println("没有执行批处理时的数据为:"); query(); String[] sqls = new String[3]; sqls[0] = "UPDATE staff SET depart='Personnel' where name='mali'"; sqls[1] = "INSERT INTO staff (name, age, sex,address, depart, worklen,wage) VALUES ('lili', 27, 'w', 'china','Technology','2','2300')"; sqls[2] = "DELETE FROM staff where name='marry'"; Connection con = null; try { con = getConnection(); // 获得数据库连接 boolean Batch_Flag = support_Batch(con); // 判断是否支持批处理 System.out.println("支持批处理? " + Batch_Flag); if (Batch_Flag) { int[] results = startBatch(con, sqls); // 执行一批SQL语句 // 分析执行的结果 for (int i = 0; i < sqls.length; i++) { if (results[i] >= 0) { System.out.println("语句: " + sqls[i] + " 执行成功,影响了" + results[i] + "行数据"); } else if (results[i] == Statement.SUCCESS_NO_INFO) { System.out.println("语句: " + sqls[i] + " 执行成功,影响的行数未知"); } else if (results[i] == Statement.EXECUTE_FAILED) { System.out.println("语句: " + sqls[i] + " 执行失败"); } } } } catch (ClassNotFoundException e1) { throw e1; } catch (SQLException e2) { throw e2; } finally { con.close(); // 关闭数据库连接 } System.out.println("执行批处理后的数据为:"); query(); } public static Connection getConnection() { // 数据库连接 Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载Mysql数据驱动 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 创建数据连接 } catch (Exception e) { System.out.println("数据库连接失败"); } return con; } public static void query() throws Exception { // 查询所有的数据 Connection con = getConnection(); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from staff"); while (rs.next()) { String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); String address = rs.getString("address"); String depart = rs.getString("depart"); String worklen = rs.getString("worklen"); String wage = rs.getString("wage"); System.out.println(name + " " + age + " " + sex + " " + address + " " + depart + " " + worklen + " " + wage); } } }
实例302 事物处理
package chp19; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * 判断数据库是否支持事务,如果支持,如何实现事务的提交与回滚。 * MySQL中如果要使用事物,必须使用InnoDB存储引擎,在创建表时,后面加上ENGINE=InnoDB。 * MySQL默认的存储引擎是MyISAM,不支持事物 */ public class Transaction { //判断数据库是否支持事务 public static boolean isTransaction(Connection con) { try { // 得到数据库的元数据 DatabaseMetaData md = con.getMetaData(); return md.supportsTransactions(); } catch (SQLException e) { e.printStackTrace(); } return false; } //将一组SQL语句放在一个事务里执行,要某全部执行通过,要某全部不执行 public static void Begin_Transaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System.out.println("事务开始!"); // 设置连接不自动提交,即用该连接进行的操作都不更新到数据库 con.setAutoCommit(false); sm = con.createStatement(); for (int i = 0; i < sqls.length; i++) { // 执行SQL语句,但是没更新到数据库 sm.execute(sqls[i]); } // 提交,立即更新到数据库 System.out.println("事务提交!"); con.commit(); System.out.println("事务结束!"); // 事务结束 } catch (SQLException e) { try { // 出现异常时,进行回滚,取消前面执行的操作 System.out.println("事务执行失败,进行回滚!\n"); con.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally { sm.close(); } } public static void main(String[] args) throws Exception { String[] sqls = new String[3]; sqls[0] = "UPDATE staff_info SET wage='2500' where name='lucy'"; sqls[1] = "INSERT INTO staff_info (name, age, sex,address, depart, worklen,wage)" + " VALUES ('hahaxiao', 27, 'w', 'china','Personnel','3','2000')"; // 执行这条语句会引起错误,因为表staff_info不允许name列重复 sqls[2] = "INSERT INTO userMess (name,password,nich,compass,sex,address,mail,phone) " + "values ('nini','nini','mali','nini','w','changchun','ml@sina.com','1315588459');"; Connection con = null; try { // 获得数据库连接 con = getConnection(); // 判断是否支持批处理 boolean isTransaction = Transaction.isTransaction(con); System.out.println("支持事务? " + isTransaction); if (isTransaction) { // 执行事务 Transaction.Begin_Transaction(con, sqls); } } catch (Exception e) { e.printStackTrace(); } finally { con.close(); // 关闭数据库连接 } query_staff(); query_userMess(); } public static Connection getConnection() { // 数据库连接 Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载Mysql数据驱动 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 创建数据连接 } catch (Exception e) { System.out.println("数据库连接失败"); } return con; } public static void query_staff() { // 查询表staff_info Connection conect = getConnection(); // 获取连接 System.out.println("表staff_info的全部记录为:"); try { String sql = "select * from staff_info"; // 查询数据的sql语句 Statement st = (Statement) conect.createStatement(); // 创建Statement对象 ResultSet rs = st.executeQuery(sql); // 返回查询数据的结果集 while (rs.next()) { // 判断是否还有下一个数据 // 根据字段名获取相应的值 String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); String address = rs.getString("address"); String depart = rs.getString("depart"); String worklen = rs.getString("worklen"); String wage = rs.getString("wage"); System.out.println(name + " " + age + " " + sex + " " + address + " " + depart + " " + worklen + " " + wage); } System.out.println(); } catch (SQLException e) { System.out.println("查询数据失败"); } } public static void query_userMess() { // 查询表userMess Connection conect = getConnection(); // 获取连接 System.out.println("表userMess的全部记录为:"); try { String sql = "select * from userMess"; // 查询数据的sql语句 Statement st = (Statement) conect.createStatement(); // 创建Statement对象 ResultSet rs = st.executeQuery(sql); // 返回查询数据的结果集 while (rs.next()) { // 判断是否还有下一个数据 // 根据字段名获取相应的值 String name = rs.getString("name"); String password = rs.getString("password"); String nich = rs.getString("nich"); String sex = rs.getString("sex"); String address = rs.getString("address"); String mail = rs.getString("mail"); String phone = rs.getString("phone"); System.out.println(name + " " + password + " " + nich + " " + sex + " " + address + " " + mail + " " + phone); } System.out.println(); } catch (SQLException e) { System.out.println("查询数据失败" + e.getMessage()); } } }
实例303 调用存储过程
package chp19; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; public class Procedure { // 获取、创建、调用数据库的存储过程 // 列出数据库中所有的存储过程名 public static void getProcedureName(Connection con) { try { DatabaseMetaData md = con.getMetaData(); // 获得数据库的元数据 ResultSet resultSet = md.getProcedures(null, null, "%"); // 获得所有的存储过程的描述 System.out.println("数据库现有的存储过程名为:"); // 显示存储过程名,位于结果集的第三个字段 while (resultSet.next()) { String procName = resultSet.getString(3); System.out.print(procName + "\t"); } System.out.println(); } catch (SQLException e) { e.printStackTrace(); } } // 调用存储过程 public static void callProcedure(Connection con) throws Exception { CallableStatement cs = null; try { // 调用无参数的存储过程 cs = con.prepareCall("{call my_update_proc()}"); cs.execute(); cs = con.prepareCall("{call my_count_proc1(?)}"); // 调用有一个输出参数的存储过程 cs.registerOutParameter(1, Types.INTEGER); // 注册输出参数的类型 cs.execute(); // 执行 int write_Param = cs.getInt(1); // 获取输出参数的值 System.out.println("my_count_proc1() 执行结果:" + write_Param); // 调用有一个输入参数和一个输出参数的存储过程 cs = con.prepareCall("{call my_count_proc(?,?)}"); // 注册输出参数的类型 cs.registerOutParameter(2, Types.INTEGER); // 设置输入参数的值 cs.setString(1, "2000"); // 执行 cs.execute(); // 获取输出参数的值 write_Param = cs.getInt(2); System.out.println("my_count_proc 执行结果:" + write_Param); } catch (SQLException e) { e.printStackTrace(); } finally { cs.close(); } } public static void main(String[] args) throws Exception { Connection con = null; try { con = getConnection(); // 获得数据库连接 getProcedureName(con); // 列出数据库的所有存储过程名 callProcedure(con); // 调用存储过程 } catch (Exception e1) { throw e1; } finally { con.close(); // 关闭数据库连接 } } public static Connection getConnection() { // 数据库连接 Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载Mysql数据驱动 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 创建数据连接 } catch (Exception e) { System.out.println("数据库连接失败"); } return con; } }
实例304 连接ODBC数据库
package chp19; import java.sql.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class JDBC_ODBC extends JFrame { private Connection connection; // 数据库变量定义 private Statement statement; private ResultSet resultSet; private JTable table; private JTextArea area; private JButton button; public JDBC_ODBC() { super("输入SQL语句,按查询按钮查看结果"); // 输出标题 try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // 加载odbc数据驱动 connection = DriverManager .getConnection("jdbc:odbc:myodbc", "", ""); } catch (ClassNotFoundException cnfex) { System.out.println("装载 JDBC/ODBC 驱动程序失败。"); cnfex.printStackTrace(); System.exit(1); } catch (SQLException sqlex) { System.out.println("连接数据库失败"); sqlex.printStackTrace(); System.exit(1); } String test = "select * from staff"; area = new JTextArea(test, 4, 30); button = new JButton("查询"); button.addActionListener(new ActionListener() { // 定义Button监听 public void actionPerformed(ActionEvent e) { getTable(); } }); JPanel topPanel = new JPanel(); topPanel.setLayout(new BorderLayout()); // 创建布局界面 topPanel.add(new JScrollPane(area), BorderLayout.CENTER); topPanel.add(button, BorderLayout.SOUTH); table = new JTable(); Container ct = getContentPane(); ct.setLayout(new BorderLayout()); ct.add(topPanel, BorderLayout.NORTH); ct.add(table, BorderLayout.CENTER); getTable(); setSize(400, 300); show(); // 显示窗口 } private void getTable() { try { String query = area.getText(); // 从文本域中获取内容 statement = connection.createStatement(); resultSet = statement.executeQuery(query); // 执行SQL语句 QueryResultSet(resultSet); // 显示查询结果 } catch (SQLException sqlex) { sqlex.printStackTrace(); } } private void QueryResultSet(ResultSet row) throws SQLException { boolean moreRecords = row.next(); // 定位到第一条记录 if (!moreRecords) { // 如果没有记录,则显示消息 JOptionPane.showMessageDialog(this, "无记录"); setTitle("无记录显示"); return; } Vector columnHeads = new Vector(); // 声明向量对象并实例化向量 Vector vec = new Vector(); try { ResultSetMetaData rsm = row.getMetaData(); for (int i = 1; i <= rsm.getColumnCount(); ++i) columnHeads.addElement(rsm.getColumnName(i)); // 获取字段的名称 do { vec.addElement(getNextRow(row, rsm)); // 获取记录集 } while (row.next()); // 显示查询结果 table = new JTable(vec, columnHeads); JScrollPane scroller = new JScrollPane(table); Container c = getContentPane(); c.remove(1); c.add(scroller, BorderLayout.CENTER); c.validate(); } catch (SQLException sqlex) { sqlex.printStackTrace(); } } private Vector getNextRow(ResultSet row, ResultSetMetaData rsm) throws SQLException { Vector currentRow = new Vector(); for (int i = 1; i <= rsm.getColumnCount(); ++i) currentRow.addElement(row.getString(i)); return currentRow; // 返回一条记录 } public void disconnect() { try { connection.close(); // 关闭数据库连接 } catch (SQLException sqlex) { System.out.println("关闭数据库连接失败"); sqlex.printStackTrace(); } } public static void main(String args[]) { final JDBC_ODBC ben = new JDBC_ODBC(); ben.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { ben.disconnect(); System.exit(0); } }); } }
实例305 数据库中图片文件的存取
package chp19; import java.io.File; import java.io.FileInputStream; import java.nio.ByteBuffer; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Image_DataBase { public static void main(String[] args) { // 生成测试类 try { File file = new File("D:/abc/PIC3.bmp"); // 将保存的图片生成文件对象 if (Image_byte(null, file)) // 如果文件成功读入byte数组则返回true。否者返回false System.out.print("ture"); else System.out.print("False"); } catch (Exception e) { System.out.println("图像生成文件对象失败 " + e.getMessage()); } } public static boolean Image_byte(String sqlstr, File file) { // 将图像文件转换成byte[] try { // 将文件对象流化,并在内存生成文件大小的缓存区 FileInputStream fin = new FileInputStream(file); // 创建字节缓存区,并分文件大小空间 ByteBuffer nbf = ByteBuffer.allocate((int) file.length()); byte[] array = new byte[1024]; int offset = 0, length = 0; // 存放字节流 while ((length = fin.read(array)) > 0) { if (length != 1024) nbf.put(array, 0, length); else nbf.put(array); offset += length; } // 关闭文件流 fin.close(); byte[] content = nbf.array(); System.out.println(content.length); return LoadImage(sqlstr, content); } catch (Exception e) { System.out.println("图像转换成byte数组失败 " + e.getMessage()); } return false; } private static boolean LoadImage(String sqlstr, byte[] in) { boolean flag = false; if (sqlstr == null) { sqlstr = "select * from image"; try { // 获取连接,生成记录集 Connection con = getConnection(); Statement stmt = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery(sqlstr); // 如果记录存在则更新记录 if (rs.next()) { rs.updateBytes(3, in); rs.updateRow(); System.out.println(" updateRow"); // 否则插入新纪录 } else { rs.moveToInsertRow(); rs.updateString(2, "01"); rs.updateBytes(3, in); rs.insertRow(); System.out.println("insertRow"); } rs.close(); flag = true; // 处理异常 } catch (Exception e) { System.out.println("图像存入数据库失败 " + e.getMessage()); } // 返回标签 return flag; } return flag; } public static Connection getConnection() { // 连接数组库 Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载Mysql数据驱动 con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 创建数据连接 } catch (Exception e) { System.out.println("数据库连接失败 " + e.getMessage()); } return con; } }
<%@ page contentType="image/jpeg;charset=GB2312"%> <%@ page import="java.sql.*"%> <%@ page import="java.io.*"%> <%@ page import="com.sun.image.codec.jpeg.*"%> <%@ page import="javax.imageio.*"%> <%@ page import="java.awt.image.*"%> <html> <head> <meta http-equiv="Content-Type" content="image/bmp;charset=GB2312"> <title>数据库中图片文件的存取</title> </head> <body> <% String sql = "select * from image where file_name ='01'"; Connection conn = null; BufferedInputStream inputImage = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载Mysql数据驱动 conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/myuser", "root", "root"); // 创建数据连接 Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()) { Blob blob = (Blob) rs.getBlob("content"); inputImage = new BufferedInputStream(blob.getBinaryStream()); } BufferedImage image = null; image = ImageIO.read(inputImage); ServletOutputStream sos = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos); encoder.encode(image); inputImage.close(); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } %> </body> </html>
-----------------------------------------------------------------------------------------------------------------------------
-- Table "gods" DDL CREATE TABLE gods ( sizes varchar(28) DEFAULT NULL, offers varchar(22) DEFAULT NULL, depict varchar(22) DEFAULT NULL, type varchar(22) DEFAULT NULL, price double(10,0) DEFAULT NULL, name varchar(100) DEFAULT NULL, id int(10) NOT NULL AUTO_INCREMENT, size varchar(12) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gb2312; -- Table "staff" DDL CREATE TABLE staff ( wage varchar(30) DEFAULT NULL, worklen varchar(30) DEFAULT NULL, depart varchar(100) DEFAULT NULL, address varchar(500) DEFAULT NULL, sex varchar(4) DEFAULT NULL, age int(4) DEFAULT NULL, name varchar(55) DEFAULT NULL, id int(12) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gb2312; -- Table "userMess" DDL CREATE TABLE usermess ( phone varchar(50) DEFAULT NULL, email varchar(100) DEFAULT NULL, address varchar(200) DEFAULT NULL, sex varchar(4) DEFAULT NULL, compass varchar(20) DEFAULT NULL, nich varchar(30) DEFAULT NULL, password varchar(30) DEFAULT NULL, name varchar(100) DEFAULT NULL, id int(10) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312; -- Table "image" DDL CREATE TABLE image ( url varchar(256) DEFAULT NULL, name varchar(100) DEFAULT NULL, id int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gb2312;
发表评论
-
JAVA范例 十九) 多媒体与图像处理 (二)
2011-09-30 19:27 1618图像处理 实例354 在计算机内存中创建一个图像 i ... -
JAVA范例 十九) 多媒体与图像处理
2011-09-30 18:40 1453a多媒体 实例349 测试音频播放器 import j ... -
JAVA范例 - Applet小应用程序
2011-09-30 18:27 3264Applet小应用程序 实例337 不断变大的文字 ... -
JAVA范例 十七)界面-Swing(二)
2011-09-30 18:06 1385实例326 BorderLayout版面布局 imp ... -
JAVA范例 十七)界面-Swing(一)
2011-09-30 17:51 2134实例306 JFrame框架的应用 import j ... -
JAVA范例 十五)网络编程
2011-07-21 17:38 139915.1 IP地址 实例270 获 ... -
JAVA范例 十四)泛型
2011-07-21 17:30 1165第14章 泛型 14 ... -
JAVA范例 十三)多线程编程(3)
2011-07-21 17:12 1557线程应用实例 实例244 下雪的村庄 ... -
JAVA范例 十三)多线程编程(2)
2011-07-21 17:06 120113.3 线程的优先级 实例238 排座位(线程优 ... -
JAVA范例 十三)多线程编程(1)
2011-07-21 16:07 1733第13章 多线程编程 13.1 多线程的五种基本状态 ... -
JAVA范例 十二)Java高级开发技术
2011-07-21 13:55 141712.1 Set 实 ... -
JAVA范例 十一)JAVA常用类
2011-07-21 13:34 137711.1 数学Math类 实例186 求圆周率∏值 ... -
JAVA范例 十) 内部类与接口
2011-07-21 12:30 1038内部类与接口 10.1 成员内部类 ... -
JAVA范例 九)面向对象---面向对象的四大特征
2011-07-21 11:50 17149.1 抽象 实例 ... -
JAVA范例 八)面向对象---面向对象的设计模式、垃圾回收
2011-07-21 11:43 9728.3 面向对象的 ... -
JAVA范例 八)面向对象---类、成员变量和方法
2011-07-21 11:30 1724类 实例148 简单的通讯录类 p ... -
JAVA范例 七)输入/输出流---字符流
2011-07-21 02:40 2175字符流 实例140 按顺序创建文件 ... -
JAVA范例 七)输入/输出流---字节流
2011-07-21 02:28 19877.2 字节流 实例123 复制指定目录下的文件 ... -
JAVA范例 七)输入/输出流---文件和目录
2011-07-21 02:16 1728文件和目录 实例116 ... -
JAVA范例 六)字符串---StringBuffer
2011-07-21 02:12 1425字符串缓存类StringBuffer ...
相关推荐
《Java范例大全》内容丰富、结构清晰,所选实例具有很强的实用性和针对性,不仅是为中初级Java开发者量身定做,而且还非常适合作为高级Java开发者的案头必备参考书。这是一本关于Java开发的大百科全书,以知识点为...
《Java范例开发大全》共22章,内容涉及Java开发环境的搭建、Java基础类型与运算符、条件控制语句、异常处理、数组、字符串、输入输出流、面向对象及其四大特征、内部类与接口、Java常用类、集合、多线程编程、Java...
本篇将详细讲解如何使用Java连接常见的数据库,如MySQL、Oracle、SQL Server等,并提供相应的代码范例。 一、JDBC简介 JDBC是Java标准库中的一个接口,它允许Java程序与各种类型的数据库进行交互,实现了数据库的跨...
"Java范例开发大全代码" 提供了丰富的实例,帮助开发者深入理解和掌握Java的各项技术。这个压缩包很可能是包含了一系列Java编程的示例代码,旨在帮助初学者和经验丰富的程序员在实践中学习和提升。 首先,让我们...
《Java范例开发大全》是一本全面覆盖Java编程的实用指南,旨在帮助初学者和有经验的开发者深入理解和掌握Java语言。这本书包含了从基础到高级的各类编程概念和技巧,通过丰富的实例代码来阐述理论知识,使学习过程...
《Java范例大全》源代码是一份非常宝贵的资源,它包含了大量的Java编程示例,旨在帮助开发者深入理解和掌握Java语言的各种特性和用法。这份源代码不仅覆盖了基础语法,还包括了面向对象编程、异常处理、集合框架、多...
输入并分类浏览参赛队信息,实际上这是一个数据库应用范例,成绩统计基本全是对数据库的各种操作,代码中增加了丰富的注释,便于Java学习者参考。 这是之前世界杯的Java成绩统计,非本届世界杯,不过若写同类程序...
Java开发范例大全是一份非常宝贵的资源,它涵盖了从初级到中级Java开发者所需的各种实例,旨在帮助学习者深入理解和掌握Java编程语言的核心概念和技术。在这个压缩包中,你将找到一系列精心设计的Java源代码,这些...
《Java通用范例开发金典源代码》是一个包含大量Java编程示例的资源集合,旨在帮助开发者深入理解和掌握Java编程语言的各种特性和应用场景。这个压缩包文件中的源代码覆盖了Java语言的基础到高级各个方面,是Java学习...
《JAVA 范例开发大全 源代码》是一本为Java开发者提供的宝贵资源,它包含了近1000个可运行的Java类,涵盖了Java编程的各个方面。这些源代码实例旨在帮助读者深入理解Java语言的特性和用法,通过实践来提升编程技能。...
Java编程通用范例是开发者们在进行Java编程时经常会参考的一种资源,它包含了各种常见问题的解决方案和最佳实践。这份资料旨在提供一个可嵌套到实际项目中的代码库,帮助开发者快速解决遇到的问题,提高开发效率。...
【标题】"超市管理软件,Java SQL数据库源代码.rar"是一个关于使用Java编程语言和SQL数据库技术开发的超市管理系统源代码。这个项目旨在提供一个实际的案例,帮助初学者理解和应用Java编程以及数据库操作。 【描述...
12. **Java SE和Java EE**:Java标准版(Java SE)和企业版(Java EE)提供了不同的功能,例如Java EE包含Web服务、数据库连接池、EJB等企业级应用所需组件。 通过《Java通用范例开发金典》中的源码,你可以深入...
最后,如果《JAVA范例开发大全》覆盖了企业级开发,那么Spring框架的使用、数据库连接(JDBC)以及MVC模式等话题也会有所涉及。Spring是Java应用开发中最常用的框架,能够简化依赖注入和事务管理。 总之,这本书的...
《Java范例开发大全》是一本深度探讨Java编程实践的书籍,其提供的全书源代码压缩包涵盖了370多个实例,旨在帮助开发者全面理解并掌握Java语言的应用。这些实例覆盖了Java语言的基础到高级特性,是学习和提升Java...
《Java范例开发大全》是一本深度探讨Java编程的书籍,涵盖了广泛的Java开发主题,并且提供了丰富的源代码示例,帮助读者深入理解并实践Java编程技术。这本书旨在为初学者和有经验的开发者提供一个全面的Java学习资源...
数据库连接池是Java应用程序中非常重要的一个组件,它在提高应用性能、节省系统资源方面起着关键作用。这里我们讨论的是一个用Java实现的数据库连接池。连接池的基本原理是预先创建并维护一定数量的数据库连接,应用...
在Java编程中,通用范例通常包括基础语法、面向对象编程、异常处理、集合框架、多线程、网络编程、I/O流、数据库操作、GUI设计、反射、注解等多个方面。下面将对这些知识点进行详细的阐述: 1. **基础语法**:Java...
《Java范例开发大全源程序》是一份宝贵的资源,对于想要深入学习Java编程的开发者来说,这无疑是一个不可多得的宝藏。这份资料包含了丰富的Java编程示例,可以帮助初学者和有经验的开发者巩固基础,理解复杂的概念,...
对于Java Web开发的学习者,通过分析和运行这些源代码,可以深入了解Java如何与服务器端技术如Servlet、JSP、JavaServer Faces (JSF) 结合,创建动态网页。还可以学习到如何使用MVC(模型-视图-控制器)架构来组织...