OAKLAND, Calif. -- The last time Trevor Cahill tossed a complete game, he had just committed to Dartmouth and was still a few credits short of his high school diploma.
These days, he'd have been the odd man out if he didn't finish the game.
Cahill tossed the Athletics' third straight complete game and his first in the big leagues, Rajai Davis hit a two-run homer and Oakland beat Kansas City 3-0 Monday night to end the Royals' three-game winning streak.
"He's an All-Star," Davis said, "and it was another typical All-Star performance by our All-Star. It's pretty amazing, isn't it?"
Cahill (11-4) used his sinker to get out of trouble, and only Wilson Betemit advanced as far as second when he led off the eighth with a double. Betemit was stranded there, one of only two Royals left on base during Cahill's three-hitter.
"The sinker is the key to my success all the time," he said. "I was able to keep it down in the zone. I walked a few guys but I also caught a break and got the double plays."
Matt Watson, Kevin Kouzmanoff and Coco Crisp also drove in runs for the A's, who won their fifth game of the last six played at home. Mitch Maier and Chris Getz collected the other hits for the Royals, who were shut out for the first time since July 4 and the fifth time overall.
Dallas Braden beat the Chicago White Sox on Saturday to start the A's run of complete games, and Gio Gonzalez lost on Sunday while finishing up. It's the first time Oakland has had three in a row since Sept. 8-10, 2000, when Gil Heredia, Tim Hudson and Barry Zito accomplished the feat.
"I was happy," Cahill said. "We're all kind of building on each other."
A's manager Bob Geren said it was crucial for his starters to go the distance at a time when his closer, last year's AL Rookie of the Year Andrew Bailey, has gone on the disabled list.
"When you have to use your set-up guys to close, it takes an inning away from the bullpen," Geren said. "You always like your starters to pick it up and nine is obviously the way to go if you can do it."
Royals starter Brian Bannister (7-11) lost his sixth straight decision and is winless since June 23. He allowed five runs on seven hits, walking four and striking out four.
"I let them scratch out a run in the first," Bannister said. "I walked too many. Then there was Davis and that was the whole ballgame. Bottom line, it was five runs in five innings. That's the way it was going and the way its been going for a few weeks now."
Bannister has given up 32 runs over his last 39 innings for a 7.38 ERA. His last victory was a 1-0 decision over Stephen Strasburg and the Washington Nationals.
"The game started and I thought, 'Banny's on it tonight,' but before the inning is over we got three walks and a hit mixed in there," Royals manager Ned Yost said. "And a 105 after five, that's a lot of pitches to throw."
Cahill faced the minimum number of hitters through seven innings, benefiting from five double plays, while Bannister struck out the first two hitters he faced before walking three around Kouzmanoff's RBI single.
The A's scored twice in the fourth, with Davis sneaking home while Getz was arguing a call at second base on Watson's double, and Davis made it 5-0 with his fifth home run, a two-run shot in the fifth inning.
Crisp added an RBI single in the eighth off Greg Holland, who was making his major-league debut for the Royals in relief.
The A's only put four balls in play during a 34-pitch first inning. ... Bannister fell to 1-6 against the A's. ... Betemit extended his hitting streak to seven games with his eighth-inning double. ... Cahill lowered his home ERA to 1.88 in nine starts. ... The A's are now 37-17 when they steal a base.