0

自从我上次来这里已经有一段时间了。请大家帮我看看这段代码。我有一个名为 timetabling_system.TTGS 的包,在主包中,即 timetabling_system.TTGS,是另一个名为 resources 的文件夹,其中有一个使用 Microsoft 访问设计的数据库。我正在尝试将我的 java 应用程序与它连接,但我不能。我尽我所能但无济于事。在线检查,我得到的只是访问有 64 位系统的问题,我的也是 64 位和我有这个应用程序要在星期四之前在学校展示。该应用程序一切正常,唯一的问题是数据库连接,它实际上是主应用程序的网关。我在这里嵌入了代码,以便专业人士可以查看它并告诉我哪里出错了。

package timetabling_system.TTGS.Login;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class LOGIN {
String url, url1, to;
String from = getClass().getResource("/timetabling_system/resources/TTGS.mdb").toString();
String error;
String hd = System.getenv("HOMEDRIVE");
String hp = System.getenv("HOMEPATH");
String tp = hd + hp;
File db;
boolean PASSF, USERF, userVal = false;

public LOGIN() {
db = new File(tp + "/Local Settings/Temp/TTGS");
if (!db.isDirectory())
if (db.mkdir()) {/* System.out.println("Created..."); */
}
if (from.contains("jar:")) {
url1 = from;
url1 = url1.substring(6 + 4);
url1 = url1.replaceAll("%20", " ");
url1 = url1.substring(0, url1.indexOf("!"));
CopyFile();
} else {
url1 = from;
url1 = url1.substring(6);
url1 = url1.replaceAll("%20", " ");
url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
+ url1;
}
error = "";
}

public void CopyFile() {
File fo = new File(db.getPath() + "/TTGS.mdb");
OutputStream fos;
try {
JarFile jf = new JarFile(url1);
JarEntry je = jf.getJarEntry("timetabling_system/resources/TTGS.mdb");
InputStream ins = jf.getInputStream(je);
fos = new DataOutputStream(new FileOutputStream(fo));
int eof = 0;
eof = ins.read();
while (eof != -1) {
fos.write(eof);
//System.out.println("b:" + eof);
eof = ins.read();
}
//System.out.println(" eof:" + eof);
ins.close();
fos.close();
from = fo.getPath();
// System.out.println(from);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
url1 = from;
url1 = url1.replaceAll("%20", " ");
url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + url1;
}

public User CHECK(User luser) {
User user = new User();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String eks = "SELECT * FROM LOGIN";
ResultSet rs = stmt.executeQuery(eks);
while (rs.next()) {
user.setUserName(rs.getString("LOGINNAME"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setType(rs.getString("TYPE"));

if (luser.getUserName().equals(user.getUserName())) {
USERF = true;// user name is right
if (luser.getPassword().equals(user.getPassword())) {
PASSF = true;// user password is right
break;
} else {
PASSF = false;// user password is wrong
break;
                }
} else
USERF = false;// user name is wrong
        }
stmt.close();
con.close();
if (PASSF == true && USERF == true) {
error = "Welcome to TTGS >> " + user.getName() + " : " + user.getType();
userVal = true;
return user;
} else {
error = "Sorry try again ! ";
return user;
}
} catch (ClassNotFoundException cls) {
error = "Error >> " + "Cannot Find Driver";
} catch (SQLException ql) {
PASSF = false;
USERF = false;
error = "Error >> " + ql.getErrorCode() + " : " + ql.getMessage();
}
return null;
}

public boolean isValid() {
return userVal;
}

public String getMsg() {
return error;
}
}
4

1 回答 1

0

如果您的应用程序无法通过以下方式找到 Jet 驱动程序

url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
+ url1;

那么它必须以 64 位运行。没有 64 位 Jet 驱动程序,因此您需要从此处下载并安装 64 位版本的 Access 数据库引擎,然后改用它:

url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="
+ url1;
于 2013-06-16T22:44:55.960 回答