当前位置:编程学习 > JAVA >>

Eclipse RCP开发连接Access数据库问题,求大神帮忙

这是工具类运行可以获得连接
public class DBUtil {
public static Connection getConnection() {
Connection con = null;
URL path = DBUtil.class.getClassLoader().getResource("bookmanager/util/BookMan.accdb");
String bookmanUrl = path.toString().substring(path.toString().indexOf("/")+1);
String url = "jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + bookmanUrl;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public static void main(String[] args) {
System.out.println(getConnection());
}
}

这是一个实现运行可以访问数据库
public class BookDAOJDBCImpl implements IBookDAO {

@Override
public Book findById(int id) throws SQLException {
String sql = "select * from book where id=?";
Connection con = DBUtil.getConnection();
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();
Book book = null;
while (rs.next()) {
book = new Book();
book.setAuthor(rs.getString("author"));
book.setAuthor_summary(rs.getString("author_summary"));
book.setB_name(rs.getString("b_name"));
book.setCatalogue(rs.getString("catalogue"));
book.setHas_read(rs.getString("has_read"));
book.setId(id);
book.setIsbn(rs.getString("isbn"));
book.setPublish_time(rs.getString("publish_time"));
book.setPublishing(rs.getString("publishing"));
book.setTotal_page(rs.getString("total_page"));
book.setWhich_edtion(rs.getString("which_edtion"));
book.setWord_number(rs.getString("word_number"));
}
return book;
}

public static void main(String[] args) {
BookDAOJDBCImpl dao = new BookDAOJDBCImpl();
try {
System.out.println(dao.findAll().size());
} catch (SQLException e) {
e.printStackTrace();
}
}

@Override
public List<Book> findAll() throws SQLException {
String sql = "select * from book";
Connection con = DBUtil.getConnection();
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
List<Book> books = new ArrayList<Book>();
while (rs.next()) {
Book book = new Book();
book.setAuthor(rs.getString("author"));
book.setAuthor_summary(rs.getString("author_summary"));
book.setB_name(rs.getString("b_name"));
book.setCatalogue(rs.getString("catalogue"));
book.setHas_read(rs.getString("has_read"));
book.setId(rs.getInt("id"));
book.setIsbn(rs.getString("isbn"));
book.setPublish_time(rs.getString("publish_time"));
book.setPublishing(rs.getString("publishing"));
book.setTotal_page(rs.getString("total_page"));
book.setWhich_edtion(rs.getString("which_edtion"));
book.setWord_number(rs.getString("word_number"));
books.add(book);
}
return books;
}
}

问题出现的地方view视图调用dao时报连接为空
public class RederTableView extends ViewPart {
public static final String ID = "bookmanager.views.RederTableView";
private TableViewer bookTable;
private List books;
private IBookDAO dao;
public static final String[] COLUMN_NAME = 
{"ID号","书名","是否可以借阅","作者","作者简介","出版社","出版时间","字数","出版数量","页数","书号","描述"};
public static final int id=0;
public static final int b_name=1;
public static final int has_read=2;
public static final int author_summary=3;
public static final int author=4;
public static final int publishing =5;
public static final int publish_time=6;
public static final int word_number=7;
public static final int which_edtion=8;
public static final int total_page=10;
public static final int isbn=11;
public static final int catalogue=12;

public RederTableView() {
dao = new BookDAOJDBCImpl();
try {
books = dao.findAll();
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void createPartControl(Composite parent) {
/*try {
books = dao.findAll();
} catch (SQLException e) {
e.printStackTrace();
}*/
bookTable = new TableViewer(parent,SWT.FULL_SELECTION);
for(int i=0;i<COLUMN_NAME.length;i++) {
new TableColumn(bookTable.getTable(),SWT.LEFT).setText(COLUMN_NAME[i]);
bookTable.getTable().getColumn(i).pack();
}
bookTable.getTable().setHeaderVisible(true);
bookTable.getTable().setLinesVisible(true);
bookTable.setContentProvider(new MyContenProvider());
bookTable.setLabelProvider(new MyLabelProvider());
bookTable.setInput(books);
}
class MyContenProvider implements IStructuredContentProvider {

@Override
public void dispose() {
// TODO Auto-generated method stub

}

@Override
public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
// TODO Auto-generated method stub

}

@Override
public Object[] getElements(Object input) {
return ((List) input).toArray();
}

}

class MyLabelProvider implements ITableLabelProvider {

@Override
public void addListener(ILabelProviderListener arg0) {
// TODO Auto-generated method stub

}

@Override
public void dispose() {
// TODO Auto-generated method stub

}

@Override
public boolean isLabelProperty(Object arg0, String arg1) {
// TODO Auto-generated method stub
return false;
}

@Override
public void removeListener(ILabelProviderListener arg0) {
// TODO Auto-generated method stub

}

@Override
public Image getColumnImage(Object e, int arg1) {
return null;
}

@Override
public String getColumnText(Object element, int cid) {
Book book = (Book)element;
if(cid == id) 
return book.getId() + "";
else if(cid == b_name)
return book.getB_name()+"";
else if(cid == author)
return book.getAuthor()+"";
else if(cid == author_summary)
return book.getAuthor_summary()+"";
else if(cid == catalogue)
return book.getCatalogue()+"";
else if(cid == has_read)
return book.getHas_read()+"";
else if(cid == isbn)
return book.getIsbn()+"";
else if(cid == publish_time)
return book.getPublish_time()+"";
else if(cid == publishing)
return book.getPublishing()+"";
else if(cid == total_page)
return book.getTotal_page()+"";
else if(cid == which_edtion)
return book.getWhich_edtion()+"";
else if(cid == word_number)
return book.getWord_number()+"";
return "";
/*PersonEO person = (PersonEO)element;
if(columnIndex == ID)
return person.getID() + "";
else if(columnIndex == NAME)
return person.getName() + "";
else if(columnIndex == GENDER)
return person.getGender() + "";
else if(columnIndex == COLOR)
return person.getColor() + "";
return "";*/
}

}

@Override
public void setFocus() {
bookTable.getControl().setFocus();
}

}

错误提示信息如下
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] '(未知)'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at bookmanager.util.DBUtil.getConnection(DBUtil.java:16)
at bookmanager.dao.book.BookDAOJDBCImpl.findAll(BookDAOJDBCImpl.java:53)
at bookmanager.views.RederTableView.<init>(RederTableView.java:48)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:260)
at org.eclipse.ui.internal.registry.ViewDescriptor.createView(ViewDescriptor.java:63)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:327)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:229)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:534)
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180)
at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270)
at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473)
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245)
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198)
at org.eclipse.ui.internal.PartStack.presentationSelectionChanged(PartStack.java:834)
at org.eclipse.ui.internal.PartStack.access$1(PartStack.java:823)
at org.eclipse.ui.internal.PartStack$1.selectPart(PartStack.java:137)
at org.eclipse.ui.internal.presentations.BasicPartList.gotoSelectedElement(BasicPartList.java:326)
at org.eclipse.ui.internal.presentations.AbstractTableInformationControl$4.mouseUp(AbstractTableInformationControl.java:326)
at 
access eclipse 数据库
补充:Java ,  Eclipse
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,