Vinnaren i pepparkakshustävlingen!
2020-02-05, 19:17
  #1
Medlem
Hej!

Försöker skriva ett javaprogram där man hämtar data ifrån databasen, skapar objekt (user) och dom objekten ska skrivas ut i XML format på tomcatservern. Då jag anger filvägen får jag dessvärre felmeddelanden som jag ej vet hur jag ska lösa. Jag kör med maven, känns som det spökar med någon jarfil..

Någon som vet något enklare sätt att göra allt på får ni gärna dela med er


Kod:
 
package com.voit.labb2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("myresource")
public class MyResource {
	DbConnector db;
	Connection conn;
	List <User> userList;
   
    
    @GET
    @Path("/database")
    @Produces(MediaType.APPLICATION_XML)
    public List<User>getUserObj() throws Exception{
    	
    // Connecting to db
    db = new DbConnector();
    System.out.println("Test");
     // retriving objects from getUser method 
     userList = db.getUser(); 
     
     
     // Returning the list with objects
     return userList;
      
    }
}
U
User klassen
Kod:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="user")
public class User {

	private int id;
	private String name;
	private String profession;
	
	public User(int id, String profession, String name ) {
		this.id = id;
		this.name = name;
		this.profession = profession;
	}
	public User() {}
	
	
	@XmlElement(name="Id")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@XmlElement(name="Name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@XmlElement(name="Profession")
	public String getProfession() {
		return profession;
	}
	public void setProfession(String profession) {
		this.profession = profession;
	}
}


Databas klassen

HTML-kod:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DbConnector {
private Connection conn;
	
	
	private String url ="jdbc:mysql://localhost:3306/labb2";
	private String username = "root";
	private String password = "hejsan123";
	
	private List <User> list; // ObjectList
	private Statement stmt;
	private ResultSet res;
	
	// Connect to database
	public DbConnector() {
		
			try {
				conn = DriverManager.getConnection(url,username,password);
				System.out.println("Connected to db!");
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
	
	// adding users to list 
	public List<User> getUser() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		list = new ArrayList();
		try {
				stmt = conn.createStatement();
				res = stmt.executeQuery("select * from user");
				
				while(res.next()) {
					User tempUser = convertToUserObj(res);
					list.add(tempUser);		
				}
					return list; // Alla 5 obejekt returnerade i lista 		
			
			}finally {
				stmt.close();
				res.close();
			}
		
		 
	}
	
	// Object converter
	private User convertToUserObj(ResultSet res) throws SQLException {
	
			int id = res.getInt("id");
			String name = res.getString("name");
			String profession = res.getString("profession");
			
			User tempUser = new User();
			
	                tempUser.setId(id);
	                tempUser.setName(name);
	                tempUser.setProfession(profession);
	                              
			return tempUser;
		}
	
	
	// print out data
	  public void getInfo(List<User> list) {
		  
		  for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i).getId() + " " + list.get(i).getName() + " "+ list.get(i).getProfession());
		}
	  }
}
Citera
2020-02-05, 19:18
  #2
Medlem
Detta är felmeddelandet

Kod:
java.sql.SQLExceptionNo suitable driver found for jdbc:mysql://localhost:3306/labb2
    
at java.sql.DriverManager.getConnection(Unknown Source)
    
at java.sql.DriverManager.getConnection(Unknown Source)
    
at com.voit.labb2.DbConnector.<init>(DbConnector.java:27)
    
at com.voit.labb2.MyResource.getUserObj(MyResource.java:28)
    
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    
at java.lang.reflect.Method.invoke(Unknown Source)
    
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(Re  sourceMethodInvocationHandlerFactory.java:52)
    
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaRe  sourceMethodDispatcher.java:124)
    
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaR  esourceMethodDispatcher.java:167)
    
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDis  patch(JavaResourceMethodDispatcherProvider.java:219)
    
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJav  aResourceMethodDispatcher.java:79)
    
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
    
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
    
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
    
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
    
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
    
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
    
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
    
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
    
at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
    
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
    
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
    
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
    
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
    
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
    
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
    
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
    
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
    
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
    
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
    
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    
at java.lang.Thread.run(Unknown Source)
Test
Loading 
class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
Feb 05, 2020 7:08:26 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/labb2] threw exception [java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at com.voit.labb2.DbConnector.getUser(DbConnector.java:49)
    at com.voit.labb2.MyResource.getUserObj(MyResource.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(Re  sourceMethodInvocationHandlerFactory.java:52)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaRe  sourceMethodDispatcher.java:124)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaR  esourceMethodDispatcher.java:167)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDis  patch(JavaResourceMethodDispatcherProvider.java:219)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJav  aResourceMethodDispatcher.java:79)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source) 
Citera
2020-02-05, 21:36
  #3
Medlem
supremanics avatar
Testa lägga
Kod:
Class.forName("com.mysql.jdbc.Driver");  
innan DriverManager.getConnection?
Citera
2020-02-06, 15:56
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av Douknowme
Hej!

Försöker skriva ett javaprogram där man hämtar data ifrån databasen, skapar objekt (user) och dom objekten ska skrivas ut i XML format på tomcatservern. Då jag anger filvägen får jag dessvärre felmeddelanden som jag ej vet hur jag ska lösa. Jag kör med maven, känns som det spökar med någon jarfil..

Någon som vet något enklare sätt att göra allt på får ni gärna dela med er


Kod:
 
package com.voit.labb2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.List;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("myresource")
public class MyResource {
	DbConnector db;
	Connection conn;
	List <User> userList;
   
    
    @GET
    @Path("/database")
    @Produces(MediaType.APPLICATION_XML)
    public List<User>getUserObj() throws Exception{
    	
    // Connecting to db
    db = new DbConnector();
    System.out.println("Test");
     // retriving objects from getUser method 
     userList = db.getUser(); 
     
     
     // Returning the list with objects
     return userList;
      
    }
}
U
User klassen
Kod:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="user")
public class User {

	private int id;
	private String name;
	private String profession;
	
	public User(int id, String profession, String name ) {
		this.id = id;
		this.name = name;
		this.profession = profession;
	}
	public User() {}
	
	
	@XmlElement(name="Id")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	@XmlElement(name="Name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@XmlElement(name="Profession")
	public String getProfession() {
		return profession;
	}
	public void setProfession(String profession) {
		this.profession = profession;
	}
}


Databas klassen

HTML-kod:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class DbConnector {
private Connection conn;
	
	
	private String url ="jdbc:mysql://localhost:3306/labb2";
	private String username = "root";
	private String password = "hejsan123";
	
	private List <User> list; // ObjectList
	private Statement stmt;
	private ResultSet res;
	
	// Connect to database
	public DbConnector() {
		
			try {
				conn = DriverManager.getConnection(url,username,password);
				System.out.println("Connected to db!");
			} catch (SQLException e) {
				e.printStackTrace();
			}
	}
	
	// adding users to list 
	public List<User> getUser() throws Exception{
		Class.forName("com.mysql.jdbc.Driver");
		list = new ArrayList();
		try {
				stmt = conn.createStatement();
				res = stmt.executeQuery("select * from user");
				
				while(res.next()) {
					User tempUser = convertToUserObj(res);
					list.add(tempUser);		
				}
					return list; // Alla 5 obejekt returnerade i lista 		
			
			}finally {
				stmt.close();
				res.close();
			}
		
		 
	}
	
	// Object converter
	private User convertToUserObj(ResultSet res) throws SQLException {
	
			int id = res.getInt("id");
			String name = res.getString("name");
			String profession = res.getString("profession");
			
			User tempUser = new User();
			
	                tempUser.setId(id);
	                tempUser.setName(name);
	                tempUser.setProfession(profession);
	                              
			return tempUser;
		}
	
	
	// print out data
	  public void getInfo(List<User> list) {
		  
		  for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i).getId() + " " + list.get(i).getName() + " "+ list.get(i).getProfession());
		}
	  }
}
I de fallen du använder Tomcat är detr den som kommer stå för initieringen av din JDBC-driver.

Till att börja med, har du fixat en jdbc-driver för MySQL? Bör gå att få tag på på mysqls sida.

Denna driver (en JAR) behöver läggas till i din tomcat så den finns tillgänglig. Kolla på https://www.microfocus.com/documenta...0BF177FAE.html

Det är förvisso en drivis för sql server där, men principen är exakt densamma.

Prova därefter din kod igen och se om det funkar.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback