Datenbankzugriff

KalleM

Aktives Mitglied
Hallo,
versuche gerade ein paar Daten aus einer Datenbank zu lesen. Die Datenbank habe ich in MySQL angelegt. Die Daten aus der Datenbank kann ich vie NetBeans lesen. Dann habe ich einmal das paket, test.domain, mit dieser Bean:
Java:
package test.domain;


public class Names {

    private int nameID;
    private String firstName;
    private String lastName;

    public Names(int nameID, String firstName, String lastName){
        this.nameID=nameID;
        this.firstName=firstName;
        this.lastName=lastName;
    }

    public int getNameID(){
        return nameID;
    }

    public void setNameID(int nameID){
        this.nameID=nameID;
    }

    public String getFirstName(){
        return firstName;
    }

    public void setFirstName(String firstName){
        this.firstName=firstName;
    }

    public String getLastName(){
        return lastName;
    }

    public void setLastName(String lastName){
        this.lastName=lastName;
    }

    public String toString(){
        return nameID+" "+firstName+" "+lastName;
    }

}
[/Java]

dann habe ich noch das Paket, test.dao mit dem Interface bzw. den Klassen:
[code=Java]

package test.dao;

import test.domain.Names;

public interface TestDAO {

    public Names selectNames(int nameID);



}

und
[Java]
package test.dao;


import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;


import test.domain.Names;


public class TestDAOImpl implements TestDAO{

private JdbcTemplate jdbcTemplate;

public void setDataSource(DataSource dataSource){
this.jdbcTemplate=new JdbcTemplate(dataSource);
}

public Names selectNames(int nameID){

String query = "SELECT * FROM NAMES WHERE NAMES_ID = ?";

return (Names) jdbcTemplate.queryForObject(query, new Object[] {
Integer.valueOf(nameID) },
new RowMapper(){
public Object mapRow(ResultSet resultSet, int rowNum)
throws SQLException{
return new Names(resultSet.getInt("NAME_ID"),
resultSet.getString("FIRSTNAME"),
resultSet.getString("LASTNAME"));
}
});
}

}
[/Java]

und weiter noch eine Main Klasse:
[Java]

package test.dao;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import test.domain.Names;

public class Main {

public static void main(String[]args){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
TestDAO testDAO = (TestDAO)context.getBean("testDAO");
Names namesTest = new Names(1,"Spring Test","Discussion related to Spring");
System.out.println(testDAO.selectNames(1));

}

}
[/Java]
und eine bean.xml
Java:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


   <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:hsqldb:hsql://localhost"/>
        <property name="username" value="root"/>
        <property name="password" value="***"/>
    </bean>


    <bean id="testDAO" class="test.dao.TestDAOImpl">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>
[/Java]

Beim starten der Main bekomme ich dann eine Fehlermeldung, dass etwas mit der JDBC Connection nicht in Ordnung ist. Denke das mein Fehler iwie in der bean.xml liegt. Komme da gerade nicht weiter und würde mich über Hilfe freuen.
 

KalleM

Aktives Mitglied
Das ist die Fehlermeldung die ich erhalte:

Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:552)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:616)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:645)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:653)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:696)
at test.dao.TestDAOImpl.selectNames(TestDAOImpl.java:29)
at test.dao.Main.main(Main.java:15)
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 7 more
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130)
... 10 more
Java Result: 1

Habe es mit einer "normalen" Klasse versucht und so klappt die Verbindung mit der DB sowie die Datenausgabe. Was mache ich den nun falsch? Iwie wird der Treiber ja nicht gefunden?
 

KalleM

Aktives Mitglied
Möchte nicht nerven, leider klappt es noch nicht so richtig.
Also das mit dem Treiber ist ok und klappt jetzt auch. Muss ich in der bean.xml nicht noch eine Eigenschaft wie:
name=database value=NameDerDB
haben, um eine Datenbank auszuwählen?
Bekomme jetzt nämlich die Meldung:
Exception in thread "main" org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT * FROM names WHERE NAME_ID = ?]; SQL state [3D000]; error code [1046]; No database selected; nested exception is java.sql.SQLException: No database selected

Weiter habe ich den Port in der bean.xml nicht angegeben. Wird durch localhost ein default Port (3306) bestimmt?
 
Zuletzt bearbeitet:

KalleM

Aktives Mitglied
Falls es jemanden interessiert (der vielleicht mal vor dem selben Problem steht), in der bean.xml sind für den mysql Treiber folgende Angaben nötig:


<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/Database"/>
<property name="username" value="root"/>
<property name="password" value="***"/>
 

Neue Themen


Oben