`

JAVA范例 十六)数据库技术

 
阅读更多

      数据库技术

  实例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() + "行&nbsp;").append(
				"共" + getMaxRowCount() + "行&nbsp;").append(
				"第" + getCurPage() + "页&nbsp;")
				.append("共" + getMaxPage() + "页").append("<br>").append("");
		if (getCurPage() == 1) {
			sbf.append(" 首页&nbsp;&nbsp;上一页");
		} else {
			sbf.append("<a href=\"javascript:gotoPage(1)\">首页</a>").append(
					"&nbsp;&nbsp;<a href=\"javascript:gotoPage("
							+ (getCurPage() - 1) + ")\">上一页</a>");
		}
		if (getCurPage() == getMaxPage()) {
			sbf.append("&nbsp;&nbsp;下一页&nbsp;&nbsp;尾页");
		} else {
			sbf.append(
					"<a href = \"javascript:gotoPage(" + (getCurPage() + 1)
							+ ")\">下一页</a>").append(
					"&nbsp;&nbsp;<a href = \"javascript:gotoPage("
							+ getMaxPage() + ")\">尾页</a>");
		}
		sbf.append("&nbsp;&nbsp;转到第").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范例大全 源码

    《Java范例大全》内容丰富、结构清晰,所选实例具有很强的实用性和针对性,不仅是为中初级Java开发者量身定做,而且还非常适合作为高级Java开发者的案头必备参考书。这是一本关于Java开发的大百科全书,以知识点为...

    Java范例开发大全

    《Java范例开发大全》共22章,内容涉及Java开发环境的搭建、Java基础类型与运算符、条件控制语句、异常处理、数组、字符串、输入输出流、面向对象及其四大特征、内部类与接口、Java常用类、集合、多线程编程、Java...

    java连接常见数据库范例

    java和各种数据库连接的方法代码。测试可用。

    Java SQL数据库统计世界杯足球赛成绩.rar

    输入并分类浏览参赛队信息,实际上这是一个数据库应用范例,成绩统计基本全是对数据库的各种操作,代码中增加了丰富的注释,便于Java学习者参考。  这是之前世界杯的Java成绩统计,非本届世界杯,不过若写同类程序...

    java 写的数据库连接池

    用java写的数据库连接池,有简单的使用范例。

    java连接数据库课程设计(1).doc

    " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "为了不暴露表结构和只显示用户需要的信息,建立了一个视图record " " " " " " " "下面是用java连接数据库的过程: " "首先下载java连接sql...

    JAVA 范例大全 光盘 资源

    JAVA 范例大全 光盘 资源 书籍目录: 前言. 第1章 开发环境搭建 1 实例1 下载、安装并配置JDK 1 实例2 第一个Java程序 3 实例3 在Eclipse中创建第一个Java程序 4 常见问题 javac不是内部或者外部命令 6 常见...

    java范例开发大全(pdf&源码)

    第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 运用映射的相关类(Map) 363 实例207 运用集的相关类(Set)...

    java连接sql 的课程设计

    很好的学习范例 学生管理方面的java连接数据库的实例

    java利用hibernate连接数据库

    java利用hibernate连接数据库,hibernate应用范例

    读取Excel数据并将数据导入到数据库范例

    读取Excel数据并将数据导入到数据库范例。数据库使用mysql数据库.

    Java典型应用彻查1000例-数据库应用基础

    资源名称:Java典型应用彻查1000例-数据库应用基础内容简介:“Java典型应用彻查1000例”以提出并解决问题为导向,通过1000多个开发范例,全面介绍Java语言从基础到网络、数据库、游戏和Web开发的特性和实现方法。...

    java范例开发大全源代码

     第4篇 Java高级开发技术  第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的随机数序列 360  实例206 运用映射的相关类(Map) 363  ...

    超市管理软件,Java SQL数据库源代码.rar

    Java开发的超市管理系统,SQL2000 源代码,考验编程者用户界面及数据库操作相关知识,不错的教学范例,大家有刚学Java的,不妨好好学习一下。

    java范例开发大全

    第4篇 Java高级开发技术 第12章 集合(教学视频:45分钟) 358 12.1 Set 358 实例204 利用HashSet删除学生 358 实例205 不重复的随机数序列 360 实例206 运用映射的相关类(Map) 363 实例207 运用集的相关类(Set)...

    Java范例开发大全 (源程序)

     第4篇 Java高级开发技术  第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的随机数序列 360  实例206 运用映射的相关类(Map) 363  实例207 ...

    SQL数据库的高考信息管理系统,JAVA源代码.rar

    Java 高考信息管理系统 SQL2000数据库,一个Java与数据库结合的小例子,可以学到一些窗体的知识,不过更多的则是Java与数据库方面的基础操作,比如添加、修改数据、管理数据等,初学者可通过这个范例学习一些数据库...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境...

    Java 高考信息管理系统 SQL数据库

    Java 高考信息管理系统 SQL2000数据库,一个Java与数据库结合的小例子,可以学到一些窗体的知识,不过更多的则是Java与数据库方面的基础操作,比如添加、修改数据、管理数据等,初学者可通过这个范例学习一些数据库...

    数据库连接范例 多种语言连接数据库

    有多种语言连接数据库,比如Java、c++等。你可以更加轻松的学习多种语言连接数据库

Global site tag (gtag.js) - Google Analytics