
import java.sql.*
/**
* @功能: 一个JDBC的本地化API连接类,封装了数据 *** 作方法,只用传一个SQL语句即可
* @作者: 李开欢
* @日期: 2007/
*/
public class ConnectionDemo {
/*
* 这里可以将常量全部放入另一个类中,以方便修改
*/
private static Connection conn
private static Statement ps
private static ResultSet rs
private static final String DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver"
private static final String URL = "jdbc:microsoft:sqlserver://localhost:1433DatabaseName=mydb"
private static final String USER ="sa"
private static final String PASS = "sa"
public ConnectionDemo() {
// TODO Auto-generated constructor stub
ConnectionDemo.getConnection()
}
public static Connection getConnection(){
System.out.println("连接中...")
try {
Class.forName(ConnectionDemo.DRIVER)
conn = DriverManager.getConnection(ConnectionDemo.URL, ConnectionDemo.USER, ConnectionDemo.PASS)
System.out.println("成功连接")
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace()
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return conn
}
public static Statement getStatement(String sql){
System.out.println("执行SQL语句中...")
try {
ps = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
if(sql.substring(0, 6).equals("select")){
rs = ps.executeQuery(sql)
System.out.println("执行完查询 *** 作,结果已返回ResultSet集合")
}else if(sql.substring(0, 6).equals("delete")){
ps.executeUpdate(sql)
System.out.println("已执行完毕删除 *** 作")
}else if(sql.substring(0, 6).equals("insert")){
ps.executeUpdate(sql)
System.out.println("已执行完毕增加 *** 作")
}else{
ps.executeUpdate(sql)
System.out.println("已执行完毕更新 *** 作")
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
return ps
}
public static ResultSet getResultSet(){
System.out.println("查询结果为:")
return rs
}
public static void closeConnection(){
System.out.println("关闭连接中...")
try {
if (rs != null) {
rs.close()
System.out.println("已关闭ResultSet")
}
if (ps != null) {
ps.close()
System.out.println("已关闭Statement")
}
if (conn != null) {
conn.close()
System.out.println("已关闭Connection")
}
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ConnectionDemo.getConnection()
String sql = "delete from type where id = 1"
ConnectionDemo.getStatement(sql)
String sql2 = "insert into type values(1,'教学设备')"
ConnectionDemo.getStatement(sql2)
String sql1 = "select * from type"
ConnectionDemo.getStatement(sql1)
ResultSet rs = ConnectionDemo.getResultSet()
System.out.println("编号 "+"类型")
try {
while(rs.next()){
System.out.print(" "+rs.getInt(1)+" ")
System.out.println(rs.getString(2))
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
ConnectionDemo.closeConnection()
}
}
第一步:创建一个查询过程,因为在登录时要根据用户名查询用户密码此步要用到pl/sql编程知识,代码如下:
create or replace procedure sel_user(uname in varchar2,pass out varchar2) is
begin
select users.password into pass from users where users.username=uname and rownum = 1
end
第二步:编写登录页面(login.java)(采用纯java+servlet编写)
//login.java如下
package cn.hnu
import java.io.IOException
import java.io.PrintWriter
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
public class testhtml extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/htmlcharset=gbk")
try {
PrintWriter pw = resp.getWriter()
pw.println("<html>")
pw.println("<head>")
pw.println("<title>")
pw.println("用户登录")
pw.println("</title>")
pw.println("</head>")
pw.println("<body>")
pw.println("<h1>用户登录</h1>")
pw.println("<hr>")
pw.println("<form method=post action=loginCl>")
pw.println("用户名:<input type=text name=userName><br>")
pw.println("密&nbsp&nbsp码:<input type=password name=password><br>")
pw.println("<input type=submit value=登录>")
pw.println("<input type=reset value=重置>")
pw.println("</form>")
pw.println("</body>")
pw.println("</html>")
} catch (Exception e) {
e.printStackTrace()
// TODO: handle exception
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp)
}
}
第三步:编程成功登录页面(wel.java) //wel.java如下,它主要用于用户正常登录后显示信息给用户
package cn.hnu
import java.io.IOException
import java.io.PrintWriter
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession
public class Wel extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//防止用户非法登录
HttpSession hs = req.getSession()
String s = (String)hs.getAttribute("pass")
if(s == null){
resp.sendRedirect("login")
}
PrintWriter pw = resp.getWriter()
pw.write("welcome,hello")
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp)
}
}
第四步:编写login处理页面(loginCl.java)
package cn.hnu
import java.io.IOException
import java.sql.*
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession
public class loginCl extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String u = req.getParameter("userName")
String p = req.getParameter("password")
//查询数据库
String pa=null
Connection ct = null
CallableStatement cs = null
try {
Class.forName("oracle.jdbc.driver.OracleDriver")
ct = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oracle",
"scott", "tiger")
cs = ct.prepareCall("{call sel_user(?,?)}")
cs.setString(1, u)
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR)
cs.execute()
pa = cs.getString(2)
System.out.println("u=" + u + " p=" + pa)
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace()
} finally {
try {
if (cs != null) {
cs.close()
}
if (ct != null) {
ct.close()
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
//验证用户信息是否合法
if (p.equals(pa)) {
HttpSession hs = req.getSession(true)//防止用户非法登录
hs.setAttribute("pass", "OK")
resp.sendRedirect("wel")
} else {
resp.sendRedirect("login")
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp)
}
}
亲,sql可以换成MySQL
这个没关系的,别的都可以照搬来用
import java.sql.*import javax.swing.*
import java.awt.*
import java.awt.event.*
import java.util.*
public class inensshow extends JFrame {
private Connection connection
private Statement statement
private ResultSet resultSet
private ResultSetMetaData rsMetaData
//GUI变量定义
private JTable table
private JTextArea inputQuery
private JButton submitQuery
public inensshow()
{
//Form的标题
super( "输入SQL语句,按查询按钮查看结果。" )
String url = "jdbc:mysql://localhost:3306/web"
String username = "inens"
String password = "inens"
try {
Class.forName( "org.gjt.mm.mysql.Driver" )
connection = DriverManager.getConnection(
url, username, password )
}
//捕获加载驱动程序异常
catch ( ClassNotFoundException cnfex ) {
System.err.println(
"装载 JDBC/ODBC 驱动程序失败。" )
cnfex.printStackTrace()
System.exit( 1 )// terminate program
}
//捕获连接数据库异常
catch ( SQLException sqlex ) {
System.err.println( "无法连接数据库" )
sqlex.printStackTrace()
System.exit( 1 )// terminate program
}
//如果数据库连接成功,则建立GUI
//SQL语句
String test="SELECT * FROM data"
inputQuery = new JTextArea( test, 4, 30 )
submitQuery = new JButton( "查询" )
//Button事件
submitQuery.addActionListener(
new ActionListener() {
public void actionPerformed( ActionEvent e )
{
getTable()
}
}
)
JPanel topPanel = new JPanel()
topPanel.setLayout( new BorderLayout() )
//将"输入查询"编辑框布置到 "CENTER"
topPanel.add( new JScrollPane( inputQuery), BorderLayout.CENTER )
//将"提交查询"按钮布置到 "SOUTH"
topPanel.add( submitQuery, BorderLayout.SOUTH )
table = new JTable()
Container c = getContentPane()
c.setLayout( new BorderLayout() )
//将"topPanel"编辑框布置到 "NORTH"
c.add( topPanel, BorderLayout.NORTH )
//将"table"编辑框布置到 "CENTER"
c.add( table, BorderLayout.CENTER )
getTable()
setSize( 500, 300 )
//显示Form
show()
}
private void getTable()
{
try {
//执行SQL语句
String query = inputQuery.getText()
statement = connection.createStatement()
resultSet = statement.executeQuery( query )
//在表格中显示查询结果
displayResultSet( resultSet )
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace()
}
}
private void displayResultSet( ResultSet rs )
throws SQLException
{
//定位到达第一条记录
boolean moreRecords = rs.next()
//如果没有记录,则提示一条消息
if ( ! moreRecords ) {
JOptionPane.showMessageDialog( this,
"结果集中无记录" )
setTitle( "无记录显示" )
return
}
Vector columnHeads = new Vector()
Vector rows = new Vector()
try {
//获取字段的名称
ResultSetMetaData rsmd = rs.getMetaData()
for ( int i = 1i <= rsmd.getColumnCount()++i )
columnHeads.addElement( rsmd.getColumnName( i ) )
//获取记录集
do {
rows.addElement( getNextRow( rs, rsmd ) )
} while ( rs.next() )
//在表格中显示查询结果
table = new JTable( rows, columnHeads )
JScrollPane scroller = new JScrollPane( table )
Container c = getContentPane()
c.remove(1)
c.add( scroller, BorderLayout.CENTER )
//刷新Table
c.validate()
}
catch ( SQLException sqlex ) {
sqlex.printStackTrace()
}
}
private Vector getNextRow( ResultSet rs,
ResultSetMetaData rsmd )
throws SQLException
{
Vector currentRow = new Vector()
for ( int i = 1i <= rsmd.getColumnCount()++i )
currentRow.addElement( rs.getString( i ) )
//返回一条记录
return currentRow
}
public void shutDown()
{
try {
//断开数据库连接
connection.close()
}
catch ( SQLException sqlex ) {
System.err.println( "Unable to disconnect" )
sqlex.printStackTrace()
}
}
public static void main( String args[] )
{
final inensshow app =
new inensshow()
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
app.shutDown()
System.exit( 0 )
}
}
)
}
}
------------------------------------------------------------
这次在WIN98中就不好使了。因为Mysql的驱动程序没有也没能加入到CLASSPATH 当中,但是JSP却可以使用(JSP的98驱动加载详见Jsp与Mysql连接查错文章),所以这次我是在XPServer中测试的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)