DevFromHell Δημοσ. 10 Δεκεμβρίου 2016 Δημοσ. 10 Δεκεμβρίου 2016 Λοιπόν κάνω το παράδειγμα που έχει το tutorialspoint.com στο Spring framework αλλά δέν μου φορτώνει ο mySQL driver για κάποιο λόγο.. Βοηθήστε.. Το μήνυμα λάθους είναι αυτό: Δεκ 09, 2016 9:06:22 ΜΜ org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5910e440: startup date [Fri Dec 09 21:06:22 EET 2016]; root of context hierarchy Δεκ 09, 2016 9:06:22 ΜΜ org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [spring/Beans.xml] Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [spring/Beans.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1493) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at spring.MainApp.main(MainApp.java:10) Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.mysql.jdbc.Driver] at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:108) at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:62) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1489) ... 13 more C:\Users\HP\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1 BUILD FAILED (total time: 2 seconds) και οι κλάσεις μου είναι οι εξής: Student.class package spring; public class Student { private Integer age; private String name; private Integer id; public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setId(Integer id) { this.id = id; } public Integer getId() { return id; } } StudentDAO.java package spring; import java.util.*; import javax.sql.DataSource; public interface StudentDAO { /** * This is the method to be used to initialize * database resources ie. connection. * @param ds */ public void setDataSource(DataSource ds); /** * This is the method to be used to create * a record in the Student table. * @param name * @param age */ public void create(String name, Integer age); /** * This is the method to be used to list down * a record from the Student table corresponding * to a passed student id. * @param id * @return */ public Student getStudent(Integer id); /** * This is the method to be used to list down * all the records from the Student table. * @return */ public List<Student> listStudents(); /** * This is the method to be used to delete * a record from the Student table corresponding * to a passed student id. * @param id */ public void delete(Integer id); /** * This is the method to be used to update * a record into the Student table. * @param id * @param age */ public void update(Integer id, Integer age); } StudentJDBCTemplate.java package spring; import java.util.List; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; public class StudentJDBCTemplate implements StudentDAO{ private DataSource dataSource; private JdbcTemplate jdbcTempaleobject; @Override public void setDataSource(DataSource dataSource) { this.dataSource=dataSource; this.jdbcTempaleobject=new JdbcTemplate(dataSource); } @Override public void create(String name, Integer age) { String SQL = "insert into Student(name,age) values (?,?)"; jdbcTempaleobject.update(SQL, name, age); System.out.println("Created record name: "+name+"Age: "+age); return ; } @Override public Student getStudent(Integer id) { String SQL ="select * from Student where id=?"; Student student = jdbcTempaleobject.queryForObject(SQL, new Object[]{id}, new StudentMapper()); return student; } @Override public List<Student> listStudents() { String SQL= "select * from Student"; List<Student> students = jdbcTempaleobject.query(SQL, new StudentMapper()); return students; } @Override public void delete(Integer id) { String SQL="delete from Student where id=?"; jdbcTempaleobject.update(SQL,id); System.out.println("Deleted record with id: "+id); return ; } @Override public void update(Integer id, Integer age) { String SQL = "update Student set age=? where id=?"; jdbcTempaleobject.update(SQL, age, id); System.out.println("Updated record with id: "+id); return ; } } StudentMapper.java package spring; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class StudentMapper implements RowMapper<Student> { @Override public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setAge(rs.getInt("age")); return student; } } MainApp.java package spring; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args){ ApplicationContext context = new ClassPathXmlApplicationContext("spring/Beans.xml"); StudentJDBCTemplate studentJDBCTemplate = (StudentJDBCTemplate) context.getBean("studentJDBCTemplate"); System.out.println("------Records Creation--------" ); studentJDBCTemplate.create("Zara", 11); studentJDBCTemplate.create("Nuha", 2); studentJDBCTemplate.create("Ayan", 15); System.out.println("------Listing Multiple Records--------" ); List<Student> students = studentJDBCTemplate.listStudents(); for (Student record : students) { System.out.print("ID : " + record.getId() ); System.out.print(", Name : " + record.getName() ); System.out.println(", Age : " + record.getAge()); } System.out.println("----Updating Record with ID = 2 -----" ); studentJDBCTemplate.update(2, 20); System.out.println("----Listing Record with ID = 2 -----" ); Student student = studentJDBCTemplate.getStudent(2); System.out.print("ID : " + student.getId() ); System.out.print(", Name : " + student.getName() ); System.out.println(", Age : " + student.getAge()); } } To XML μου ειναι το εξής: Beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/giannis"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> <bean id="studentJDBCTemplate" class="spring.StudentJDBCTemplate"> <property name="dataSource" ref="dataSource"/> </bean> </beans>
Luciddream Δημοσ. 10 Δεκεμβρίου 2016 Δημοσ. 10 Δεκεμβρίου 2016 Μάλλον λείπει το mysql connector dependency.
DevFromHell Δημοσ. 10 Δεκεμβρίου 2016 Μέλος Δημοσ. 10 Δεκεμβρίου 2016 Βασικά έχω ένα θεματάκι με την mySQL μου.. όταν τρέχει το mysqld δέν τρέχει το MYSQL57 και το ανάποδο.. συνδέομαι κανονικά και φτιάχνω τη βάση μου giannis με τον πίνακα Student όμως.. αλλά πιθανότατα η λύση είναι εδώ ε? http://stackoverflow.com/questions/8779631/jdbc-driver-class-not-found-com-mysql-jdbc-driver
Luciddream Δημοσ. 10 Δεκεμβρίου 2016 Δημοσ. 10 Δεκεμβρίου 2016 Βασικά έχω ένα θεματάκι με την mySQL μου.. όταν τρέχει το mysqld δέν τρέχει το MYSQL57 και το ανάποδο.. συνδέομαι κανονικά και φτιάχνω τη βάση μου giannis με τον πίνακα Student όμως.. Απο πού συνδέεσαι? απο άλλο πρόγραμμα εννοείς? Πρέπει να βρεί τον mysql connector στο classpath η Java αλλιώς δεν θα παίξει. αλλά πιθανότατα η λύση είναι εδώ ε? Εξαρτάται πώς buildareis το app, δεν ξέρω τι κάνει το tutorial... αν είναι με maven απλά βάζεις τον mysql connector στο pom.xml ... αλλιώς βάζεις το jar στον φάκελο με τα libraries π.χ (το ant νομίζω τα παίρνει έτσι)
DevFromHell Δημοσ. 10 Δεκεμβρίου 2016 Μέλος Δημοσ. 10 Δεκεμβρίου 2016 Εξαρτάται πώς buildareis το app, δεν ξέρω τι κάνει το tutorial... αν είναι με maven απλά βάζεις τον mysql connector στο pom.xml ... αλλιώς βάζεις το jar στον φάκελο με τα libraries π.χ (το ant νομίζω τα παίρνει έτσι) Ακόμα δέν θέλω να βάλω Maven και Hibernate.. θα το φτιάξω με jar στα libraries προς το παρόν.. απλά λίγο βοήθεια στη διαδικασία.. NetBeans χρησιμοποιώ Κανω αυτό εδώ https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-installing-classpath.html ή κατεβάζω το mysql-connector-java-5.1.40 και το πετάω στα libraries? Τα classpath και την εγκατάσταση του Maven την έχω κάνει..
Luciddream Δημοσ. 10 Δεκεμβρίου 2016 Δημοσ. 10 Δεκεμβρίου 2016 Αν καταλαβαίνω καλά απο το"The IDE provides built-in support for Spring Framework 4.x and 3.x. Framework libraries are packaged with the IDE and are automatically added to the project classpath when the framework is selected." απλά έκανες copy paste τον κώδικα και προσπαθείς να το τρέξεις. Δεν είναι τόσο απλά τα πράγματα, συνήθως. Σου σκάει επειδή τον driver τον ψάχνει στο runtime, οπότε και δεν σου σκάει στο compiling. Πρέπει να κάνεις include το library με κάποιο τρόπο. Αν και έχω να δω netbeans κάτι χρόνια, αν πας στα properties του project θα δεις οτι σου δίνει επιλογή να κανεις import κάποια libraries. θα βάλεις εκεί τον φάκελο που θα έχεις τον mysql connector και θα παίξει. Γενικά προσπάθησε να διαβάσεις κάποια γενικότερα πράγματα για Java, classpath, ant - maven, κτλπ πριν προσπαθήσεις να πας σε spring... γιατί σε βλέπω να πελαγώνεις μετά. Τα classpath και την εγκατάσταση του Maven την έχω κάνει.. Άρα το build γίνεται μέσω maven? Τότε θα έχεις ένα pom.xml οπου εκεί μέσα θα προσθέσεις ένα entry για το dependency, p.x <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency>
DevFromHell Δημοσ. 10 Δεκεμβρίου 2016 Μέλος Δημοσ. 10 Δεκεμβρίου 2016 Πήγα στο project - properties και πρόσθεσα το zip mysql-connector-java-5.1.40 στα libraries αλλά πάλι βγάζει το ίδιο μήνυμα λάθους.. pom.xml δέν έχω καθόλου..
Luciddream Δημοσ. 10 Δεκεμβρίου 2016 Δημοσ. 10 Δεκεμβρίου 2016 Πήγα στο project - properties και πρόσθεσα το zip mysql-connector-java-5.1.40 στα libraries αλλά πάλι βγάζει το ίδιο μήνυμα λάθους.. unzip τον connector.zip και βάλε το jar στα libraries.. όχι το zip
DevFromHell Δημοσ. 10 Δεκεμβρίου 2016 Μέλος Δημοσ. 10 Δεκεμβρίου 2016 (επεξεργασμένο) εντάξει παιδιά SOLVED! Απλά θέλει να βάλεις τον connector/j και στα files και στα projects όπως δείχνει αυτό το βίντεο.. https://www.youtube.com/watch?v=nW13FmTdkjc Να το ξέρετε όσοι μαθαίνετε τώρα σάν εμένα.. το προχωράω με Maven και hibernate και θα σας ξαναρωτήσω μόλις έχω απορία.. δέν είναι και τόσο δύσκολα πάντως.. Επεξ/σία 10 Δεκεμβρίου 2016 από DevFromHell
DevFromHell Δημοσ. 11 Δεκεμβρίου 2016 Μέλος Δημοσ. 11 Δεκεμβρίου 2016 Καλημέρα.. να σας ρωτήσω πάλι.. τα Stored Procedures/Functions στην mySQL είναι απαραίτητα στο Spring framework και πρέπει να τα μάθω καλά ή να πάω στα Ant, Log4j και να τα αφήσω για αργότερα? Θέλω να φτιάξω ένα project για το portfolio μου αλλά θα χρησιμοποιώ GlashFish και Oracle για βάση..
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα