新聞中心
在Web應(yīng)用程序開(kāi)發(fā)中,數(shù)據(jù)庫(kù)是一個(gè)必不可少的組成部分。對(duì)于Java程序員來(lái)說(shuō),數(shù)據(jù)庫(kù)操作也是必須要掌握的技能之一。Java中,有多種數(shù)據(jù)庫(kù)連接的方式,本文將介紹幾種Java中常見(jiàn)的數(shù)據(jù)庫(kù)連接方式。

為東源等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及東源網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、東源網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
一、JDBC連接方式
JDBC(Java DataBase Connectivity)是Java中訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)技術(shù),Java程序員可通過(guò)JDBC連接關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)讀寫操作。JDBC連接需要采用Java中提供的JDBC驅(qū)動(dòng),不同數(shù)據(jù)庫(kù)連接的驅(qū)動(dòng)是不同的。開(kāi)發(fā)者需要使用相應(yīng)的JDBC驅(qū)動(dòng)來(lái)連接數(shù)據(jù)庫(kù)。
JDBC連接使用步驟如下:
1. 加載驅(qū)動(dòng)
使用Class.forName()方法加載驅(qū)動(dòng)類。例如: Class.forName(“com.mysql.jdbc.Driver”);
2. 創(chuàng)建連接
使用DriverManager.getConnection()方法創(chuàng)建連接對(duì)象。例如: Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,”root”,”root”);
3. 創(chuàng)建語(yǔ)句
使用Connection.prepareStatement()方法創(chuàng)建預(yù)編譯的SQL語(yǔ)句。例如: PreparedStatement ps = conn.prepareStatement(“select * from user where name=? and password=?”);
4. 執(zhí)行SQL語(yǔ)句
使用PreparedStatement.executeUpdate()方法執(zhí)行SQL語(yǔ)句。例如: ResultSet rs = ps.executeQuery();
5. 獲取結(jié)果集
通過(guò)ResultSet獲取執(zhí)行SQL語(yǔ)句返回的結(jié)果。
JDBC連接方式簡(jiǎn)單易懂,適合初學(xué)者學(xué)習(xí)。但是,JDBC連接存在一些缺陷,比如代碼重復(fù),書寫繁瑣等等。
二、C0數(shù)據(jù)庫(kù)連接池
C0是一款開(kāi)源的數(shù)據(jù)庫(kù)連接池庫(kù),使用C0可以有效提高數(shù)據(jù)庫(kù)訪問(wèn)速度,避免了頻繁的數(shù)據(jù)庫(kù)連接開(kāi)關(guān)操作。使用C0的好處在于它可以有效地管理數(shù)據(jù)庫(kù)連接,避免因?yàn)轭l繁的數(shù)據(jù)庫(kù)連接打開(kāi)和關(guān)閉導(dǎo)致的效率低下的問(wèn)題。
使用C0連接池連接數(shù)據(jù)庫(kù)的步驟如下:
1. 引入C0的jar包
2. 配置數(shù)據(jù)源
通過(guò)配置c3p0-config.xml文件或者在Java代碼中編寫配置信息來(lái)初始化數(shù)據(jù)源。例如:
“`
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(driverClass);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUser(user);
dataSource.setPassword(password);
“`
3. 獲取連接
從數(shù)據(jù)源中獲取連接進(jìn)行數(shù)據(jù)庫(kù)操作。例如:
“`
Connection connection = dataSource.getConnection();
“`
C0連接池方便易用,可以較容易地管理并發(fā)連接和提高連接使用效率。
三、Hibernate連接方式
Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架,它使用JDBC連接關(guān)系型數(shù)據(jù)庫(kù),但與JDBC不同的是,Hibernate是面向?qū)ο蟮模瑥?qiáng)制性地將數(shù)據(jù)存儲(chǔ)到類中。
使用Hibernate連接數(shù)據(jù)庫(kù)的步驟如下:
1. 引入Hibernate的jar包
2. 配置Hibernate連接屬性
Hibernate連接屬性包括驅(qū)動(dòng)類名稱、連接URL、用戶名和密碼等。例如:
“`
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test
hibernate.connection.username=root
hibernate.connection.password=root
“`
3. 創(chuàng)建SessionFactory
SessionFactory是Hibernate的核心接口,用于生成Session實(shí)例,這個(gè)過(guò)程比較耗費(fèi)性能,因此盡量使用單例模式。例如:
“`
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
“`
4. 獲取Session
Session是Hibernate的核心組件,用于進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn)和修改數(shù)據(jù)等操作。例如:
“`
Session session = sessionFactory.openSession();
“`
Hibernate使用面向?qū)ο蟮姆绞竭M(jìn)行數(shù)據(jù)庫(kù)操作,開(kāi)發(fā)效率高,使用方便。
Java實(shí)現(xiàn)登陸系統(tǒng)需要連接數(shù)據(jù)庫(kù),常用的數(shù)據(jù)庫(kù)連接方式有JDBC連接、C0連接池和Hibernate連接方式。選擇不同的連接方式需要考慮到自己的程序需求和技能水平,JDBC連接方式適合初學(xué)者,C0連接池適合于需要高并發(fā)連接和提高連接使用效率的情況,Hibernate適合對(duì)面向?qū)ο蟮募夹g(shù)有一定掌握的開(kāi)發(fā)者。在實(shí)現(xiàn)登陸系統(tǒng)之前? 程序員需要仔細(xì)評(píng)估選擇數(shù)據(jù)庫(kù)連接方式的優(yōu)缺點(diǎn),以作出合適的選擇。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
求用java編登錄頁(yè)面,可以連接MySql 數(shù)據(jù)庫(kù)
之一步:創(chuàng)建一個(gè)查詢過(guò)程,因?yàn)樵诘卿洉r(shí)要根據(jù)用戶名查詢用戶密碼
此步要用到pl/蘆旁顫sql編程知陪敗識(shí),代碼如下:
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;
第二步:編寫登錄頁(yè)面(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/html;charset=gbk”);
try {
PrintWriter pw = resp.getWriter();
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“用戶登錄”);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“
用戶登錄
“);
pw.println(“”);
pw.println(“”);
pw.println(“用戶名:
“);
pw.println(“密  碼:
“);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“”);
pw.println(“”);
} 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);
}
}
第三步:編程成功登錄頁(yè)面(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(“l(fā)ogin”);
}
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處理頁(yè)面(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”);
//查詢數(shù)據(jù)庫(kù)
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();
}
}
//驗(yàn)證用戶信息是否合法
if (p.equals(pa)) {
HttpSession hs = req.getSession(true);//防止用戶非法登錄
hs.setAttribute(“pass”, “OK”);
resp.sendRedirect(“wel”);
} else {
resp.sendRedirect(“l(fā)ogin”);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp);
}
}
親,sql可以換成MySQL
這個(gè)沒(méi)關(guān)系的,別的都可以照搬來(lái)用
Java中怎么連接數(shù)據(jù)庫(kù)
這個(gè)很簡(jiǎn)單
1、初學(xué)者常見(jiàn)的方式,使迅租用JDBC直連數(shù)據(jù)畝蠢兆庫(kù),檔毀加載一下驅(qū)動(dòng)就可以。比較直觀,但是項(xiàng)目中沒(méi)人這樣用,因?yàn)閷?duì)于昂貴的數(shù)據(jù)庫(kù)連接沒(méi)有管理。
2、項(xiàng)目常見(jiàn)的方式,使用數(shù)據(jù)庫(kù)連接池,DBCP,C0,proxool 等等,有統(tǒng)一有效的數(shù)據(jù)庫(kù)連接管理,比較方便。
3、希望對(duì)你有幫助。
java中如何實(shí)現(xiàn)登錄界面與數(shù)據(jù)庫(kù)正確連接?
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;/*** * @author mzhe**/
class Loginfrm extends JDialog implements ActionListener
{
JLabel l_name,l_pass,l_error;
JTextField t_name;
JButton b_enter,b_cancle,b_clear;
JPanel pan1,pan2,pan3,pan4;
JPasswordField t_pass;
String sname,spass;
int sunit;
NetConn sql;
Statement sqll;
ResultSet rs;
Librarybox lbox;
int until=0;
Loginfrm(JFrame f,String s)
{
//界面布局
super(f,s);
l_name=new JLabel(“名字:”);
l_pass=new JLabel(“密碼:”);
l_error=new JLabel(“請(qǐng)輸入用戶名和密碼登錄”);
t_name=new JTextField(“”,10);
t_pass=new JPasswordField(“”,10);
t_pass.setEchoChar(‘悉灶*’);
b_enter=new JButton(“確定”);
b_enter.addActionListener(this);
b_cancle=new JButton(“取消”);
b_cancle.addActionListener(this);
b_clear=new JButton(“清除”);
b_clear.addActionListener(this);
pan1=new JPanel();
pan2=new JPanel();
pan3=new JPanel();
pan4=new JPanel();
pan1.add(l_name);
pan1.add(t_name);
pan2.add(l_pass);
pan2.add(t_pass);
pan3.add(l_error);
pan4.add(b_enter);
pan4.add(b_cancle);
pan4.add(b_clear);
setLayout(new GridLayout(4,1));
add(pan1);
add(pan2);
add(pan3);
add(pan4);
//建立數(shù)據(jù)庫(kù)連接
sql=new NetConn();
//設(shè)睜配扮置窗口大小
setSize(300,300);
setVisible(false);
//得到屏幕信息以便使框架居中顯示
Dimension screeSize = Toolkit.getDefaultToolkit().getScreenSize();
int screeWidth=screeSize.width;
int screeHeight=screeSize.height;
//得到框架的大小信息賣滾
Dimension frameSize=this.getSize();
int x=(screeWidth-frameSize.width)/2;
int y=(screeHeight-frameSize.height)/2;
this.setLocation(x, y);
}
public void actionPerformed(ActionEvent e)
{
//單擊確定按鈕的事件處理程序
if(e.getSource()==b_enter)
{
//如果連續(xù)登錄次數(shù)小于4
if(until
{
//如果用戶名或者密碼為空,將顯示提示信息
if(t_name.getText().equals(“”)||t_pass.getText().equals(“”))
{
l_error.setText(“用戶名和密碼不能為空”);
}
else
{
try{
sqll=sql.connect();
//根據(jù)用戶名查詢
rs=sqll.executeQuery(“SELECT * FROM users where username=”+”‘”+t_name.getText()+”‘”);
//遍歷查詢得到的結(jié)果集
while(rs.next())
{
sname=rs.getString(2);
spass=rs.getString(3);
//得到登錄用戶的級(jí)別
sunit=Integer.parseInt(rs.getString(4));
//如果密碼正確
if(t_pass.getText().equals(spass))
{
//判斷用戶的級(jí)別,根據(jù)不同的級(jí)別,顯示不同的菜單
switch(sunit)
{
case 1:{l_error.setText(“登錄成功”);
t_name.setText(“”);
t_pass.setText(“”);
lbox=new Librarybox();
lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lbox.setResizable(false);
lbox.bookfi.setEnabled(true);
lbox.bookse.setEnabled(true);
lbox.bookth.setEnabled(true);
lbox.bookfo.setEnabled(true);
lbox.mi_system_manger.setEnabled(true);
lbox.mi_system_login.setEnabled(false);
lbox.setVisible(true);this.dispose();
break;
}
case 2: {
l_error.setText(“登錄成功”);
t_name.setText(“”);
t_pass.setText(“”);
lbox=new Librarybox();
lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lbox.setResizable(false);
lbox.bookfi.setEnabled(false);
lbox.bookse.setEnabled(false);
lbox.bookth.setEnabled(true);
lbox.bookfo.setEnabled(false);
lbox.mi_system_manger.setEnabled(false);
lbox.mi_system_login.setEnabled(false);
lbox.setVisible(true);
this.dispose();break;
}
case 3:
{
l_error.setText(“登錄成功”);
t_name.setText(“”);
t_pass.setText(“”);
lbox=new Librarybox();
lbox.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
lbox.setResizable(false);
lbox.bookfi.setEnabled(true);
lbox.bookse.setEnabled(false);
lbox.bookth.setEnabled(false);
lbox.bookfo.setEnabled(true);
lbox.mi_system_manger.setEnabled(false);
lbox.mi_system_login.setEnabled(false);
lbox.fi_msglabel_user.setEnabled(false);
lbox.setVisible(true);
this.dispose();
break;
}
}
}
else{
l_error.setText(“用戶名或密碼錯(cuò)誤!”);
until++;
}
}
}catch(SQLException e2){
e2.printStackTrace();
}
}
}
//超出登錄次數(shù)
else{
l_error.setText(“你已經(jīng)超出登錄次數(shù)”);
t_name.setEnabled(false);
t_pass.setEnabled(false);
b_enter.setEnabled(false);
b_clear.setEnabled(false);
}
}//單擊清除按鈕的事件處理程序
else if(e.getSource()==b_clear)
{
t_name.setText(“”);
t_pass.setText(“”);
l_error.setText(“請(qǐng)輸入用戶名和密碼登錄”);
}
//單擊取消按鈕的事件處理程序
else if(e.getSource()==b_cancle)
{
dispose();
}
}
}
看你用什么框架了耐枝 簡(jiǎn)單一點(diǎn)的比如jsp+javabean 頁(yè)面提交表單,提交給后臺(tái)的javabean 后臺(tái)使昌侍敏用jdbc的話 按照jdbc的配置順序建立好數(shù)據(jù)庫(kù)連接,然后拼sql語(yǔ)句 把表單的變量放到sql語(yǔ)句里 就完談桐成了一次和數(shù)據(jù)庫(kù)的交互??!很簡(jiǎn)單的,多看看其他人的項(xiàng)目例子!
關(guān)于java登陸界面如何連數(shù)據(jù)庫(kù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
分享題目:Java實(shí)現(xiàn)登陸系統(tǒng):數(shù)據(jù)庫(kù)連接方式簡(jiǎn)介(java登陸界面如何連數(shù)據(jù)庫(kù))
標(biāo)題網(wǎng)址:http://fisionsoft.com.cn/article/dpgcehc.html


咨詢
建站咨詢
